如何使用websockets连接两个node.js服务器?
这是我的问题:
我有服务器A,运行node.js和使用socket.io与客户端(networking浏览器)进行通信。 这一切都运行良好,花花公子。
然而,现在我有服务器B,也需要通过websockets连接到服务器A,我已经打了一堵墙。 我find的node.js websocket客户端都不能在服务器A上使用socket.io。
所以,我正在努力的是:
.--------. .----------. .----------. | CLIENT | <--> | SERVER A | <--> | SERVER B | '--------' '----------' '----------'
客户端 – 服务器连接通过socket.io完成
现在,服务器B(运行node.js)应该通过websocket连接到服务器A(为了通过端口80)。 但…
即使在socket.io客户端模块中的示例代码不起作用…:/
// Connect to server var socket = new io.Socket('localhost', {port: 8080}); socket.connect(); // Add a connect listener socket.on('connect', function(socket) { console.log('Connected.'); });
代码只是通过没有任何错误,几秒钟后执行结束。
更新:代码示例
服务器(工作正常)看起来像这样:
// Load requirements var http = require('http'), io = require('socket.io'); // Create server & socket var server = http.createServer(function(req, res){ // Send HTML headers and message res.writeHead(404, {'Content-Type': 'text/html'}); res.end('<h1>Aw, snap! 404</h1>'); }); server.listen(8080); io = io.listen(server); // Add a connect listener io.sockets.on('connection', function(socket) { console.log('Client connected.'); // Disconnect listener socket.on('disconnect', function() { console.log('Client disconnected.'); }); });
客户端看起来像这样
console.log('1'); // Connect to server var io = require('socket.io-client') var socket = new io.Socket('localhost', {port: 8080}); socket.connect(); console.log('2'); // Add a connect listener socket.on('connect', function(socket) { console.log('Connected!'); }); console.log('3');
1,2和3打印出来很好,没有错误,几秒钟后,这个过程刚刚结束
此外,服务器A不会向日志输出任何内容,即使我已将socket.io日志logging设置为“全部”。
原来,因为某些原因,我使用了旧的例子,尽pipe我三重检查了它们。 那么,呃。
另外,事实certificate,socket.io-客户端在最新的节点(6.xx)上是坏的。 pipe理从githubfind更新,replace文件和耶,一切正常!
编辑 :不幸的是,我没有保存任何工作示例的链接,但快速浏览代码后,似乎唯一的变化是客户端代码,现在看起来像这样:
console.log('1'); // Connect to server var io = require('socket.io-client') var socket = io.connect('localhost:8080', {reconnect: true}); console.log('2'); // Add a connect listener socket.on('connect', function(socket) { console.log('Connected!'); }); console.log('3');
这里是我写的一段代码,它使用了socket.io 1.0.6和socket.io-client 1.0.6。 情况如下:
服务器A(Socket.io客户端)<—>服务器B(Socket.io服务器)
服务器B(服务器):
// Load requirements var http = require('http'), io = require('socket.io'); // Create server & socket var server = http.createServer(function(req, res) { // Send HTML headers and message res.writeHead(404, {'Content-Type': 'text/html'}); res.end('<h1>Aw, snap! 404</h1>'); }); server.listen(8080); io = io.listen(server); // Add a connect listener io.sockets.on('connection', function(socket) { console.log('Client connected.'); // Disconnect listener socket.on('disconnect', function() { console.log('Client disconnected.'); }); });
服务器A(客户端):
console.log('1'); // Connect to server var io = require('socket.io-client'); var socket = io.connect('http://localhost:8080', {reconnect: true}); console.log('2'); // Add a connect listener socket.on('connect', function(socket) { console.log('Connected!'); }); console.log('3');
如果我仅在客户端服务器上使用localhost:8080,则它不会连接。
对未来的人来说:
这里有两个非常简单的Node.js
应用程序,它们使用socket.io来相互连接,发送和接收消息。
所需包是:
npm install socket.io
Node-App-1 server.js:
var io = require('socket.io').listen(3000); io.on('connection', function (socket) { console.log('connected:', socket.client.id); socket.on('serverEvent', function (data) { console.log('new message from client:', data); }); setInterval(function () { socket.emit('clientEvent', Math.random()); console.log('message sent to the clients'); }, 3000); });
Node-App-2 client.js:
var io = require('socket.io-client'); var socket = io.connect("http://localhost:3000/", { reconnection: true }); socket.on('connect', function () { console.log('connected to localhost:3000'); socket.on('clientEvent', function (data) { console.log('message from the server:', data); socket.emit('serverEvent', "thanks server! for sending '" + data + "'"); }); });