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

Posted

技术标签:

【中文标题】如何在同一个端口上使用 ExpressJS 和 Socket.io?【英文标题】:How to use ExpressJS and Socket.io on a same port? 【发布时间】:2012-08-27 10:56:18 【问题描述】:

在 ExpressJS 的第三版中,express.createServer() 更改为 express(),此更改使得在同一端口上绑定 socket.io 变得困难。也许有人可以找到稳健的决定。

现在,这不起作用:

var express = require('express')
, app = express.createServer()
, io = require('socket.io').listen(app);

我目前的工作流程:https://gist.github.com/3596852

【问题讨论】:

我也会对此感兴趣。 Socket.io 的自述文件已更新以匹配 Express 3.0(请参阅 github.com/LearnBoost/socket.io#express-3x),但这对我也不起作用。 【参考方案1】:

它在socket.io github 页面上进行了描述(正如您的评论中所述的@Golo):

var app = express()
  , server = require('http').createServer(app)
  , io = io.listen(server);

server.listen(80);

这行得通,我正在运行它。

可能 Golo 忘记了将监听从 app.listen(80) 更改为 server.listen(80)。我也一直在为此苦苦挣扎,直到我意识到自己的愚蠢错误。

【讨论】:

是的,将 app.listen 更改为 server.listen 也为我修复了它! 这个解决方案仍然适用于当前的 Express。检查this这个活生生的例子。 这在 express 中对我有用:4.16.3,socket.io:2.1.1。 哦,你是救生员。谢谢。【参考方案2】:
var app = require('express')()
  , server = require('http').createServer(app)
  , io = require('socket.io').listen(server)

app.start = app.listen = function()
  return server.listen.apply(server, arguments)


app.start(8080)

【讨论】:

gist.github.com/3620800 看看这个要点,它带有工作体解析器示例。

以上是关于如何在同一个端口上使用 ExpressJS 和 Socket.io?的主要内容,如果未能解决你的问题,请参考以下文章

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

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

将 ReactJS 和 ExpressJS 部署到 Nginx

使用 CORS 登录 expressjs 应用程序

如何在 tsconfig.json 上启用 typeRoots 的 typescript/expressjs 应用程序上运行 jest

如何使用 expressJS 提供 ReactJS 静态文件?