在 ExpressJS 中将 socket.io 实现为子模块的最佳方法是啥?

Posted

技术标签:

【中文标题】在 ExpressJS 中将 socket.io 实现为子模块的最佳方法是啥?【英文标题】:What's the best way to implement socket.io as a submodule within ExpressJS?在 ExpressJS 中将 socket.io 实现为子模块的最佳方法是什么? 【发布时间】:2013-02-28 12:16:32 【问题描述】:

我正在尝试使用 tjholowaychuk 建议的子模块架构构建基于 ExpressJs 的应用程序。

我还想有一些实时套接字交互,所以我正在尝试集成 socket.io。我正在努力寻找作为子应用程序执行此操作的最佳方法,并允许 Express 和 socket.io 一起收听。

【问题讨论】:

你读过socket.io/#how-to-use('使用 Express (3) web 框架')吗? 我确实做过 RTFM,但我在将它用作子模块时遇到了问题。 您能详细说明一下吗?不确定“将其用作子模块”是什么意思。 我希望我的 socket.io 逻辑远离主应用程序。我假设我可以按照vimeo.com/56166857 的建议使用expressjs.com/api.html#app.use 来做到这一点 【参考方案1】:

您可以将所有socket.io 相关代码放在一个单独的文件中:

// socketio.js
var sio = require('socket.io');
module.exports = function(server) 
  var io = sio.listen(server);
  io.sockets.on('connection', ...);
  return io;
;

// app.js
var app    = require('express')(), 
    server = require('http').createServer(app),
    io     = require('./socketio')(server);

【讨论】:

以上是关于在 ExpressJS 中将 socket.io 实现为子模块的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

ExpressJS - 带有路由分离的 Socket.IO

如何在同一个端口上使用 ExpressJS 和 Socket.io?

expressjs 的 socket.io 设置

expressJS 和 socket.io 监听不同的端口和 socket.io 客户端连接

我的 ExpressJS 网站和 socket.io 端口可以使用相同的端口吗?

带有 socket.io 和 expressjs 的节点集群