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)
我想我做错了,错过了一些明显的东西.
有什么建议?
刚刚遇到这个问题,而另一个问题就像它有一个更好的答案.
你可以做服务器到服务器."客户端"代码与浏览器上的代码保持一致.太棒了不是吗?
我自己试了一下,它工作得很好..
我运行了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).
对于搜索简短工作示例的任何人,请参见下文.此示例适用于socket.io@0.9.16和socket.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)
ECONNABORTED意味着连接已被“另一方”关闭。
例如,假设我们有两个程序 A 和 B。程序 A 连接到程序 B,并且它们开始来回发送数据。程序B由于某种原因关闭了连接。连接关闭后,程序 A 尝试写入程序 B,但由于连接关闭,程序 A 将收到错误ECONNABORTED。
您的一个程序已关闭连接,而另一个程序不知道这一点并尝试写入套接字,从而导致错误。
| 归档时间: |
|
| 查看次数: |
27498 次 |
| 最近记录: |