【问题标题】:How to emit an event in response to an event using socket.io?如何使用 socket.io 发出事件以响应事件?
【发布时间】:2016-01-24 10:48:33
【问题描述】:

我是 socket.io 的新手,并试图让它工作。我不知道我在这里做错了什么,因为它看起来非常简单 - 但它不起作用。我想我遗漏了一些明显的东西。希望其他人能看到那是什么。

我正在设置 socket.io 以使用 node/express 服务器。这是我正在尝试做的测试的简化版本。

服务器:

var http = require('http');
var express = require('express');
var app = express();
var server = http.createServer(app);
var io = require('socket.io')(server);

/* socket.io test */
io.on('connection', function(socket){
  socket.on('helloServer', function(clientMessage){
    console.log("Server got 'helloServer' event");
    socket.emit('helloClient', { message : "Hi there. We got your message: " + clientMessage.message});
  });
});

客户端有一个函数callServer,当用户单击 UI 中的按钮时会调用它:

var socket = io.connect('http://localhost');

function callServer() {
  socket.emit('helloServer', { message : "Hello server!" });
}

socket.on('helloClient', function (serverMessage) {
  console.log(serverMessage.message);
});

当我运行此代码并单击调用callServer 的按钮时,服务器确实收到了事件helloServer,因为我看到控制台按预期记录了消息,但客户端从未收到@987654326 @ 事件。就好像socket.on 响应函数中的socket.emit 调用永远不会被调用。

我做错了什么?

【问题讨论】:

    标签: javascript node.js express socket.io


    【解决方案1】:

    好像没问题。但是,以防万一,请检查this answer 与所有向客户端发送数据的方式,并尝试使用“io.emit”(发送给所有客户端)。或者尝试发送一个字符串而不是一个 json 对象。

    我已经尝试过这个example here,它正在工作,只是复制和粘贴。

    【讨论】:

    • 谢谢。使用io.emit 有效 - 虽然我不明白为什么。显然,正在打开多个套接字。我需要更深入地研究文档。感谢您为我指明正确的方向。
    • 是的,也许这就是问题所在。为保证您要回复发送方客户端,请获取它的套接字 id 并使用socket.broadcast.to(socketid).emit() 直接回复它。
    • 感谢您的帮助。实际上,创建的套接字不止一个。我上面发布的代码是我实际代码的简化版本,它要长得多。我在实际代码中发现了错误,感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2019-10-30
    • 2014-08-28
    • 1970-01-01
    • 2022-12-11
    相关资源
    最近更新 更多