如何使用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 + "'"); }); });