- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在 socket.io 和 websocket(来自“ws”包)处理程序之间共享相同的 http 服务器。不幸的是,尽管他们正在监听不同的前缀,但第一个监听/socket.io,第二个监听/websocket url,由于某些原因,如果它们在同一台服务器上运行,则 websocket 无法正常工作。
我做了一些调试,但似乎两个库都正确处理了请求,但最后只有 socket.io 正常工作。
知道如何解决吗?
最佳答案
套接字在 node.js 中的工作方式与普通请求的工作方式有很大不同。没有路由,所以你必须监听所有的套接字,而不是监听一个 url。 socket.io
的默认行为是关闭任何它无法识别的套接字连接。要解决此问题,您需要将标记 'destroy upgrade': false
添加到选项中(server
是一个快速服务器):
require('socket.io').listen(server, {'destroy upgrade': false, ...})
您还需要在客户端连接时检查 url(在处理 /websocket
的代码中),如果它看起来属于 socket.io
,则忽略它>。您可以从客户端对象(传递到 on connection
处理程序)中找到 url 作为 client.upgradeReq.url
。
关于javascript - Socket.io 和 Webscocket 在同一个服务器上监听,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18333396/
我需要在 socket.io 和 websocket(来自“ws”包)处理程序之间共享相同的 http 服务器。不幸的是,尽管他们正在监听不同的前缀,但第一个监听/socket.io,第二个监听/we
func handleConn(w http.ResponseWriter, r *http.Request) { ws, err := upgrader.Upgrade(w, r,
我是一名优秀的程序员,十分优秀!