路由内的套接字连接

时间:2013-08-09 17:54:50

标签: javascript node.js express socket.io

我正在尝试通过维护快速路由或路由器页面中的所有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');
};

有什么想法吗?非常感谢。

3 个答案:

答案 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。