0
我是socket.io的新手,并试图让它工作。我不知道我在这里做错了什么,因为它看起来非常直截了当 - 但它不起作用。我想我错过了一些明显的东西。希望别人能看到那是什么。如何使用socket.io发出响应事件的事件?
我正在设置socket.io以与节点/快递服务器一起使用。这是我尝试做的测试的简化版本。
服务器:
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
,因为我发现控制台按预期记录了消息,但客户端从未收到事件helloClient
。就好像socket.on
响应函数中的socket.emit
调用永远不会被调用。
我在做什么错?
谢谢。使用'io.emit'工作 - 虽然我不明白为什么。显然,多个插座正在打开。我需要深入研究文档。感谢您指点我正确的方向。 –
是的,也许这就是问题所在。为了保证你想回复发件人客户端,获取它的套接字id并直接使用'socket.broadcast.to(socketid).emit()'回复它。 –
感谢您的帮助。事实上,正在创建多个插座。我上面发布的代码是我的实际代码的简化版本,这个代码要长得多。感谢您的帮助,我发现了实际代码中的错误。 –