如何在我的网站的特定页面上使用socket.io?

oha*_*nho 6 node.js socket.io

假设我有一个网站,主页上不需要网络套接字,但是在某些其他相对路径(例如'/ new')上需要它.

假设我需要"连接"事件,以便计算登录"主页"页面和"新"页面的用户.

我试图在相对路径中配置socket.io'connection'事件,如:

app.get('/new',
         function(req,res) {
              io.sockets.on('connection', function (socket) {
                .....
              }
         });
Run Code Online (Sandbox Code Playgroud)

但:

  1. 它表现不佳.当很多用户连接时,该事件不应该被提升.
  2. 我没有在网上看到任何像上面那样的例子.所有socket.io事件都在主文件(app.js)中配置一次.

怎么做到呢 ?

fre*_*ish 16

回答你的问题:

  1. 显然,因为当用户点击/new其处理程序时触发并添加连接处理程序io.这是一个巨大的内存泄漏.

  2. 这与上面的相关.您不希望每次用户点击时都添加连接处理程序/new.

现在解决你的问题我认为最好的想法就是打电话(在浏览器端)

io.connect("http://localhost/new");
Run Code Online (Sandbox Code Playgroud)

然后在你的Node.js应用程序中:

io.of("/new").on("connection", function (socket) {
    // here are connections from /new
});
Run Code Online (Sandbox Code Playgroud)

代码应放在顶层,而不是放在路由处理程序中.如果您希望它更具动态性,那么您可以创建自己的子协议:

  1. 连接到io服务器:io.connect("http://localhost);
  2. 发送消息I'm in /new;
  3. 在服务器上获取该消息并将该连接存储在适当的列表中.

当然,您可以在路由处理程序中指定是否希望客户端连接到socket.io服务器(仅通过传递某种标志).

  • 1. 您能详细解释一下第二个选项吗?也许分享一些代码?2. 'of' 是保留字吗? (2认同)