Socket.io:从一台服务器连接到另一台服务器

Ser*_*sev 13 node.js socket.io

我正在尝试使nodejs(socket.io)服务器与另一个服务器进行通信.因此,客户端向"集线器"服务器发出事件,并且该服务器向某个第二服务器发出事件以处理该操作.

我试着这样做:

var io_client = require( 'socket.io-client' );
Run Code Online (Sandbox Code Playgroud)

然后,

io_client.connect( "second_server_host" ); 
Run Code Online (Sandbox Code Playgroud)

它似乎适用于连接,但你不能做任何事情:

debug - set close timeout for client 15988842591410188424
info  - socket error Error: write ECONNABORTED
 at errnoException (net.js:642:11)
 at Socket._write (net.js:459:18)
 at Socket.write (net.js:446:15)
Run Code Online (Sandbox Code Playgroud)

我想我做错了,错过了一些明显的东西.

有什么建议?

guy*_*abi 9

刚刚遇到这个问题,而另一个问题就像它有一个更好的答案.

/sf/answers/988267171/

你可以做服务器到服务器."客户端"代码与浏览器上的代码保持一致.太棒了不是吗?

我自己试了一下,它工作得很好..

我运行了2台服务器 - 使用相同的确切代码 - 一次在端口3000上作为服务器,另一台在端口3001上作为客户端.代码如下所示:

  , io = require('socket.io')
  , ioClient = require('socket.io-client')

   .... 

   if ( app.get('port') == 3000 ){

    io.listen(server).sockets.on('connection', function (socket) {
      socket.on('my other event', function (data) {
        console.log(data);
      });
    });
}else{
    function emitMessage( socket ){
        socket.emit('my other event', { my: 'data' });
        setTimeout(function(){emitMessage(socket)}, 1000);
    }
    var socket = ioClient.connect("http://localhost:3000");
    emitMessage(socket);
}
Run Code Online (Sandbox Code Playgroud)

如果你在服务器端看到每秒都有一个"{my:data}"打印,那么一切都很好.只需确保在服务器(端口3000)之后运行客户端(端口3001).


Sim*_*ter 6

对于搜索简短工作示例的任何人,请参见下文.此示例适用于socket.io@0.9.16socket.io-client@0.9.16.

var port = 3011;

var server = require( 'http' ).createServer( ).listen( port, function () {
    console.log( "Express server listening on port " + port );
} );

var io = require( 'socket.io' ).listen( server ).set( "log level", 0 );

io.sockets.on( "connection", function ( socket ) {
    console.log( 'Server: Incoming connection.' );
    socket.on( "echo", function ( msg, callback ) {
        callback( msg );
    } );
} );


var ioc = require( 'socket.io-client' );
var client = ioc.connect( "http://localhost:" + port );

client.once( "connect", function () {
    console.log( 'Client: Connected to port ' + port );

    client.emit( "echo", "Hello World", function ( message ) {
        console.log( 'Echo received: ', message );
        client.disconnect();
        server.close();
    } );
} );
Run Code Online (Sandbox Code Playgroud)


Som*_*ude 0

ECONNABORTED意味着连接已被“另一方”关闭。

例如,假设我们有两个程序 A 和 B。程序 A 连接到程序 B,并且它们开始来回发送数据。程序B由于某种原因关闭了连接。连接关闭后,程序 A 尝试写入程序 B,但由于连接关闭,程序 A 将收到错误ECONNABORTED

您的一个程序已关闭连接,而另一个程序不知道这一点并尝试写入套接字,从而导致错误。