【问题标题】:Socket connection inside route路由内的套接字连接
【发布时间】:2013-08-09 17:54:49
【问题描述】:

我正在尝试通过在 express 路由或路由器页面中维护所有 socket.io 功能来清理我的 express 节点应用程序(依赖于此处回答的问题: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');
};

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

【问题讨论】:

    标签: javascript node.js express socket.io


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      根据该答案,这正是您想要做的。

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

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

      【讨论】:

        【解决方案3】:

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

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

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

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

        并确保

        res.render('index');
        

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

        但它看起来还是很乱,我会尝试类似 session.socket.io 甚至 express.io 的东西。

        【讨论】:

          猜你喜欢
          • 2011-12-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多