客户端只能发出一次,“强制新连接”会复制响应。

时间:2013-05-23 17:56:42

标签: node.js socket.io

我的客户端只能发出一次“强制新连接”将响应复制回我的客户端。这是我的代码,所以你可以查一查。

server.js

var app = require('http').createServer()
, io = require('socket.io').listen(app);

app.listen(5000);


io.sockets.on('connection', function(socket) {

   socket.on('sendSheet', function(data) {
      io.sockets.emit('displayData', data);

   });

   socket.on('disconnect', function() {
      io.sockets.emit('user disconnected');
   });
});

client.js

var socket = io.connect('http://localhost:5000', {'force new connection': true});
socket.on('dispatchConnect', function (data) {
    socket.emit('sendSheet', mergedForm);
});

socket.on('displayData', function (data) {
    console.log(data);
});

1 个答案:

答案 0 :(得分:0)

了解nodejs中的异步函数,并尝试理解“节点事件循环”。

您的代码阻止了您的功能同步。

由于事件循环在单个线程中运行,因此它仅在回调结束时处理下一个事件。

你应该从不在回调中使用阻塞函数,因为你阻止了事件循环 并且防止其他回调 - 可能属于其他客户端连接 - 被提供。

这是一个异步示例:

var myAsyncFunction = function(someArg, callback) { // simulate some I/O was done
    setTimeout(function() {  // 1 second later, we are done with the I/O, call the callback
        callback();
    }, 1000)
}