我正在尝试通过维护快速路由或路由器页面中的所有socket.io功能来清理我的快速节点应用程序(依赖于此处回答的问题:Nodejs include socket.io in router page)。由于某些未知原因,没有套接字连接打开(没有记录“成功”)。
//app.js
server = http.createServer(app).listen(3000);
app.get('/', function(req,res){
routes.index(req,res,app,server);
});
我的routes.index看起来像这样:
//routes.index
var socketio = require('socket.io');
exports.index = function(req,res,app,server){
var io = socketio.listen(server);
server.listen(3000);
console.log("routed correctly?"); //yes, it is routed correctly.
io.sockets.on('connection', function (socket) {
console.log("success");
});
res.render('index');
};
有什么想法吗?非常感谢。
答案 0 :(得分:1)
我认为这没有多大意义,因为每次有人请求exports.index
你正在重新创建一个新的socket.io服务器。 Socket.io是一个与路线一起生活的通信层。
答案 1 :(得分:1)
根据该答案,这正是您不想想做的事情。
使用此逻辑,每次点击/
路由时,您都会为connect
事件添加另一个侦听器。这应该只在路由逻辑之外完成一次。此外,您的服务器还尝试多次侦听端口3000。
如果要访问特定用户Web会话的套接字,则需要使用session.socket.io之类的内容将connect
事件收到的套接字与该用户会话相关联(有多个库)这样做 - 这只是一个例子)
答案 2 :(得分:0)
感谢您的回复。我意识到我不应该这样做,但我仍然不确定为什么特定的配置不起作用。
我遇到的问题是我没有意识到在我的服务器找到“连接”之前需要从client.js打开套接字。
所以要解决它,我只需要写:
//client.js
var socket = io.socket();
并确保
res.render('index');
出现在io.sockets.on('connection',function(socket){...})
之前但它仍然看起来很乱,我会尝试像session.socket.io甚至express.io。