如何在同一个端口上使用 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
如何在 tsconfig.json 上启用 typeRoots 的 typescript/expressjs 应用程序上运行 jest