0

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

有任何想法吗?非常感激。

4

3 回答 3

1

我认为这没有多大意义,因为每次有人请求exports.index你重新创建一个新的 socket.io 服务器。Socket.io 旨在成为位于路由旁边的通信层。

于 2013-08-09T18:21:41.093 回答
1

根据那个答案,这正是你不想做的

使用这个逻辑,每次你的路由被命中时,你都会为事件/添加另一个监听器。connect这应该只做一次,在你的路由逻辑之外。此外,您的服务器还尝试多次侦听端口 3000。

如果您想访问特定用户 Web 会话的套接字,则需要使用session.socket.ioconnect之类的东西将从事件接收到的套接字与该用户会话相关联(有多个库这样做 - 这只是一个示例)

于 2013-08-09T18:25:48.740 回答
0

感谢您的回复。我意识到我不应该这样做,但我仍然不确定为什么该特定配置不起作用。

我遇到的问题是,在我的服务器找到“连接”之前,我没有意识到需要从 client.js 打开套接字。

所以要修复它,我只需要写:

//client.js
var socket = io.socket();

并确保

res.render('index');

出现在 io.sockets.on('connection', function (socket) {...}) 之前

但它看起来仍然很乱,我会尝试像 session.socket.io 甚至 express.io 这样的东西。

于 2013-08-09T19:05:29.647 回答