如果https服务器是一个单独的node.js应用程序,我如何在node.js中使用wss?

ecbunoof  于 2023-01-25  发布在  Node.js
关注(0)|答案(1)|浏览(135)

我在nodejs中创建了一个带有websocket的多人游戏(使用ws lib),运行良好,为了调试,我通过file://协议打开html文件,用客户端网页连接到websocket服务器。
我想把网页托管在我的使用https的网络服务器上。这个网络服务器也使用nodejs,但是因为网页是通过https服务的,所以它不能通过ws创建连接,需要wss。安全降级等等。

我的问题是我有两个独立的程序:HTTPS网络服务器和网络套接字"游戏"服务器。
当我尝试连接到WS服务器时,我得到:
未捕获DOM异常:操作不安全。
我只找到了如何通过创建https服务器来设置wss的说明,但我已经有了一个。
我需要把这两个程序结合起来吗?
我可以也许只是服务与http的游戏单页?
有没有其他的技术,没有这些安全限制?(我不关心加密的websockets)

xeufq47z

xeufq47z1#

我能让它工作:
而不是想使用https服务器从网络服务器,我“升级”我的http服务器的“游戏服务器”到https。
我不想“创建”另一个https服务器,因为我认为这会导致错误,但我已经间接地用new WebSocketServer.Server({ port: PORT });创建了一个http服务器。
为了创建https服务器并将其用于WebSocketServer,我使用了以下代码:

let cert = fs.readFileSync(pathtocertkey, "utf8");
    let key = fs.readFileSync(pathtopublickey, "utf8");
    let options = {key: key, cert: cert};
    let server = require("https").createServer(options);
    const wss = new WebSocketServer.Server({ server: server});

之后,我可以监听任何端口与server.listen(PORT,callback)
我也不确定如何或是否可以获得使用greenlock获得的证书,但我在greenlock.d/live/[yourdomain]/下找到了它,其中greenlock.d是greenlock.init(options)中指定的configDir。
对于客户端,我需要这样连接:ws = new WebSocket("wss://mydomain:"+PORT); '

相关问题