如何使用websockets连接两个node.js服务器?

cra*_*ish 57 node.js socket.io

这是我的问题:

我有服务器A,运行node.js并使用socket.io与客户端(Web浏览器)进行通信.这一切都运行良好和花花公子.

但是,既然我有服务器B,它也需要通过websockets连接到服务器A,我已经碰壁了.我发现的node.js websocket客户端都不能与服务器A上的socket.io一起使用.

所以,这是我正在努力的情况:

.--------.      .----------.      .----------.
| CLIENT | <--> | SERVER A | <--> | SERVER B |
'--------'      '----------'      '----------'
Run Code Online (Sandbox Code Playgroud)

客户端 - 服务器连接通过socket.io完成

现在,服务器B(运行node.js)应该通过websocket连接到服务器A(以便通过端口80).但...

甚至socket.io-client模块中的示例代码也不起作用......:/

// 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.');
});
Run Code Online (Sandbox Code Playgroud)

代码只传递没有任何错误,几秒钟后执行结束.

更新:代码示例

服务器(工作得很好)看起来像这样:

// 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.');
    });
});
Run Code Online (Sandbox Code Playgroud)

客户端看起来像这样

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');
Run Code Online (Sandbox Code Playgroud)

1,2和3打印出来就好了,没有错误,几秒钟后该过程就会退出

此外,服务器A不会向日志输出任何内容,即使我在"所有内容"上设置了socket.io日志记录.

cra*_*ish 29

事实证明,由于某种原因,我正在使用旧的例子,即使我对它们进行了三重检查.好吧,doh.

另外,事实证明socket.io-client在最新的Node(6.xx)上被破坏了.管理从github找到更新,替换文件和yay,一切正常!

编辑:不幸的是我没有保存任何链接到工作示例,但在快速浏览代码之后,似乎唯一的更改是客户端代码,现在看起来像这样:

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');
Run Code Online (Sandbox Code Playgroud)


Bag*_*ani 17

对于未来的人:
这是两个非常简单的Node.js应用程序,使用socket.io来相互之间连接,发送和接收消息.

必需的包是:

npm install socket.io
Run Code Online (Sandbox Code Playgroud)

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);
});
Run Code Online (Sandbox Code Playgroud)

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 + "'");
    });
});
Run Code Online (Sandbox Code Playgroud)


Reg*_*ult 10

这是我写的一段代码,它使用的是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.');
  });
});
Run Code Online (Sandbox Code Playgroud)

服务器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');
Run Code Online (Sandbox Code Playgroud)

如果我只在客户端服务器上使用localhost:8080,则它不会连接.