我的代码如下:
io.on("connection", function(socket) {
socket.on("req1", Handler1);
});
var Handler1= function(args1)
{
console.log(args1);
socket.emit('resp1', {id: 21321}); <---- ERROR - Socket not defined
}
知道如何在Handler1中访问套接字obj?声明全局对象并为其分配套接字有效,但我不知道它是否是一个好的解决方案?许多客户端与服务器的连接会发生什么?
答案 0 :(得分:0)
您可以在on
设置中定义处理程序:
io.on("connection", function(socket) {
var Handler1= function(args1)
{
console.log(args1);
socket.emit('resp1', {id: 21321});
}
socket.on("req1", Handler1);
});
或者,如果需要在其他地方重用Handler1
,请为其添加socket
参数,并从包装函数中调用它:
var Handler1= function(socket, args1)
{
console.log(args1);
socket.emit('resp1', {id: 21321});
}
io.on("connection", function(socket) {
socket.on("req1", function(a) { Handler1(socket, a); } );
});
答案 1 :(得分:0)
你可以绑定它:
io.on("connection", function(socket) {
socket.on("req1", create_handler(socket));
});
function create_handler(socket) {
return function (args1) { // we return the handler function that now has access to socket
console.log(args1);
socket.emit('resp1', {id: 21321});
};
}
或者,如果您不需要重用处理程序构造,则可以将其全部内联:
io.on("connection", function(socket) {
socket.on("req1", function (args1) {
console.log(args1);
socket.emit('resp1', {id: 21321});
});
});
答案 2 :(得分:0)
您在定义“socket”变量的范围之外定义“Handler1”函数。如果在“连接”处理程序中定义处理程序,它将具有使用的引用。
io.on("connection", function(socket) {
var Handler1 = function(args1) {
console.log(args1);
socket.emit('resp1', {id: 21321});
}
socket.on("req1", Handler1);
});