【问题标题】:Socket emits not sending from client (sending fine from server)套接字发出不从客户端发送(从服务器发送正常)
【发布时间】:2014-07-06 02:10:13
【问题描述】:

以下是一个单元测试,用于显示我正在经历的行为,我认为这些行为与我之前经历的不同。从本质上讲,我之前(可能是两个月前)使用套接字的方式从那时到现在的某个时间停止了工作。我不确定发生了什么。我以前工作的代码已经坏了。

var socketio = require('socket.io');
var http = require('http');

var server = http.createServer(function(req, res) {
    res.writeHead(200, {'Content-Type' : 'text/html' });
    var html = "<html><head><script src=\"/socket.io/socket.io.js\"></script>\
                        <script>var sock = io.connect();\
                        sock.on('sup', function(data) {\
                            console.log(\"whoo\");\
                            sock.emit('howdy', {'hi' : 'ho'});\
                        });</script></head></html>";
    res.end(html);
}).listen(8080);

socketio.listen(server, {log:false}).on('connection', function(socket) {
    socket.on('howdy', function(data){console.log("HI!");});
    socket.emit("sup", {"hey" :"yo"});
});

我对代码的期望是以下事件序列:

  1. socket 连接,服务器发出“sup”消息。
  2. 客户端收到“sup”消息并记录“whoo”
  3. 客户端发送“你好”消息
  4. 服务器收到“你好”消息并记录“HI!”

第 4 步根本没有发生。 (因此我认为第 3 步也可能不会发生)

发生了什么事?

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

    您的客户端代码本质上是这样的

    var sock = io.connect(); 
    console.log("Gets here");
    sock.on('sup', function(data) { 
         console.log("whoo"); 
    });
    sock.emit('howdy', {'hi' : 'ho'});
    

    我假设如果你只是将发射移到处理程序中它会起作用。

    var sock = io.connect(); 
    console.log("Gets here");
    sock.on('sup', function(data) { 
         console.log("whoo"); 
         sock.emit('howdy', {'hi' : 'ho'});
    });
    

    或者你可以尝试监听连接事件

    var sock = io.connect(); 
    console.log("Gets here");
    sock.on('sup', function(data) { 
         console.log("whoo"); 
    });
    sock.on('connect', function() {
         sock.emit('howdy', {'hi' : 'ho'});
    });
    

    【讨论】:

    • 感谢您的建议,但这并没有解决我的问题。查看我修改后的代码(我进一步精简了)
    【解决方案2】:

    我刚刚更新了 socket.io,它现在可以工作了。

    【讨论】:

    • facepalm,干得好,我们所有人都遇到过:p
    • @Jujuleder 是的,我没有意识到客户端版本只是指向 socket.io 托管的最新版本的链接。我想“好吧,我使用的是过时的版本,但过时的版本曾经可以工作......”
    猜你喜欢
    • 2013-04-01
    • 2016-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 2016-07-17
    • 1970-01-01
    相关资源
    最近更新 更多