2016-01-24 39 views
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调用永远不会被调用。

我在做什么错?

回答

1

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

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

+0

谢谢。使用'io.emit'工作 - 虽然我不明白为什么。显然,多个插座正在打开。我需要深入研究文档。感谢您指点我正确的方向。 –

+0

是的,也许这就是问题所在。为了保证你想回复发件人客户端,获取它的套接字id并直接使用'socket.broadcast.to(socketid).emit()'回复它。 –

+0

感谢您的帮助。事实上,正在创建多个插座。我上面发布的代码是我的实际代码的简化版本,这个代码要长得多。感谢您的帮助,我发现了实际代码中的错误。 –