我有一个类似的设置:
var WebSocketServer = require("ws").Server,
express = require("express"),
http = require("http"),
app = express(),
server = http.createServer(app);
app.post("/login", login);
app.get("/...", callSomething);
// ...
server.listen(8000);
var wss = new WebSocketServer({server: server});
wss.on("connection", function(ws){
// ...
});
我想把WebSocketServer放在一个特定的路径下,例如"...com/whatever"
。问题是我如何设置路径?可以吗?
6条答案
按热度按时间l3zydbqr1#
您将需要使用
path
选项:请参阅完整文档here
k4aesqcs2#
使用express-ws:https://www.npmjs.com/package/express-ws
安装:
HTTP服务器示例:
HTTPS服务器示例:
注意我强烈建议在NodeJS和互联网之间使用中间服务器(例如Nginx)来实现HTTPS、压缩和缓存等功能,它的工作效率会更高,而且其配置在将来也更容易更改
浏览器客户端示例:
hmtdttj43#
UPDATE路径在ws服务器选项中是有效的。
已接受的答案不再有效,并将引发
Frame Header Invalid
错误。Pull Request #885。正如Lpinca所说,WS路径被删除:
这里的问题是,每个WebSocketServer都会为HTTP服务器上的升级事件添加一个新的侦听器,当发出该事件时,所有服务器上都会调用handleUpgrade。
解决方法如下:
xdyibdwo4#
您可以通过将传入的套接字请求作为中间件来使用这个简单的想法,我发现这非常有用
在app.js中
现在将中间件放在那里
或者,这显然是一个简单一点,这代替:
现在您的ws结构在您的路由器中可用,例如:
或者如果您通过www.example.com将其附加到应用程序app.ws:
请特别注意“ws.once”的使用,而不是“ws.on”,否则您将在每次请求时在WebSocket.server的新示例上获得多个连接。
干杯!:)
nom7f22z5#
为了基于Ivan Kolyhalov的方法进行构建,可以通过将WebSocketServer(或其任何属性)分配给
app.locals
来从任何端点访问WebSocketServer。因此,您只需管理server.js
中WebSocketServer的连接处理。在下面的代码中,我们将WebSocketServer的
clients
属性指定为app.locals
,这样我们就可以通过向路由端点发出HTTP请求,将自定义消息广播/推送到所有连接的客户端。服务器.js
./路线/api/宠物.js
xam8gpfp6#
首先,所有关于这个主题的评论对我理解路由和ws都很有帮助,我是个新手。我尝试了所有的方法,没有一个对我有用。我的目标只是把Web Socket添加到已经有路由的server.js中。当我看到Ivan Kolyhalov的解决方案时,他正在使用req.ws来分配路由器中的web套接字。所以为什么不使用req.socket.server来获取路由器文件中的服务器对象。所以,这就是我所做的,但是它花了一些时间来弄清楚。请,让我知道,如果你认为我做错了。PS.我处理客户端的断开连接,并通过nginx代理请求升级。
server.js
api.js