我在node.js中创建一个服务器(使用socket.io),这个特定的问题一直困扰着我。我为套接字连接创建了一个易于扩展的处理程序,以将每个不同的连接路由到不同的函数。
... <previous code> ...
var socketHandlers = {
'chat':chat.onMessage,
'chatNameRequest':chat.onNameRequest,
'changeRooms':commands.onPlayerRoomChange,
'commandEnter':commands.onCommandEnter
};
io.sockets.on('connection', function (socket) {
console.log("New client connected.");
// add all handlers to this socket when connected
for (var handler in socketHandlers) {
socket.on(handler, function(data) {
console.log("Resolved handler for " + handler + ", called function " + socketHandlers[handler]);
// sanitize each handler before sending it to the inner functions
// leave more specific sanitization for the inner function
data = valid.cleanData(data);
socket = valid.cleanSocket(socket);
// finally send it to the inner functions
socketHandlers[handler](socket, data);
});
}
});
然而,它似乎没有起作用。这是服务器的控制台输出:
debug - flashsocket received data packet 5:::{"args":{"name":"Timothy"},"name":"chatNameRequest"}
Resolved handler for commandEnter, called function function (socket, data) {
<function contents, etc>
正如您所看到的,该程序收到了“chatNameRequest”的请求,但它错误地将其路由到“commandEnter”。有人可以对这里发生的事情有所了解吗?
答案 0 :(得分:0)
查看console.log
输出的内容。套接字收到消息commandEnter
,并将其路由到正确的处理程序。发布客户端代码?
另外,正如Pointy所说,你应该研究.bind
(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind),因为你可能很快就会需要它。