gpt4 book ai didi

node.js - Nodejs : websocket routing based on URL without port proxying

转载 作者:太空宇宙 更新时间:2023-11-03 22:18:06 27 4
gpt4 key购买 nike

我正在尝试用node.js中的服务器端逻辑在html5中做一个游戏,并且使用原始的websockets(不是Socket.IO,我需要二进制数据)。我希望有多个“房间”,因此有多个 websocket 服务器,所有服务器都有单独的 URL。目前,我只找到了一种方法,让每个 websocket 服务器附加到特定端口,然后根据 url 将升级请求(不完全确定它是如何工作的)代理到正确的端口。

它可以在我的电脑上运行。问题是,当我尝试将其提交给 PaaS 提供商 (AppFog) 时,代码失败,因为他们不允许打开除提供的 http 端口之外的任何端口。

这是我的代码的一个非常清晰的版本:

//start web server (basic static express server) on 8080
// ...


//start game server and listen to port 9000
// I use the ws module for websockets
// I plan to have a couple of these "game servers"
// ...


//open the proxy server.

var httpProxy= require('http-proxy');

var webProxyServer = httpProxy.createServer(function (req, res, proxy){

// I need http requests to be redirected to the "game servers"

if(req.url.substring(0, "/room1".length) === "/room1") // if starts with "/room1"

proxy.proxyRequest(req, res, {
host: 'localhost',
port: 9000
});


else

proxy.proxyRequest(req, res, {
host: 'localhost',
port: 8080
});

}

webProxyServer.on('upgrade', function (req, socket, head) {

//redirecting logic goes here

if(req.url=="/room1/"){

webProxyServer.proxy.proxyWebSocketRequest(req, socket, head, {
host: 'localhost',
port: 9000
})
}

});


webProxyServer.listen(8000); //the "outside port".

我的问题:是否可以在不监听任何特定端口的情况下打开 websocket 服务器,并手动将套接字附加到它们,这样我就不需要打开除基本 http 端口之外的任何端口?我知道 Socket.IO 会以某种方式做到这一点。也许有一种方法可以监听http服务器的升级事件并将套接字传递给正确的websocket服务器?

我对服务器端的东西还很陌生,所以欢迎在这里和那里提供额外的信息。

最佳答案

不幸的是,Appfog 不支持 websockets。

Feature Roadmap page - 页面底部:将 websockets 显示为即将推出的功能(即它们不支持它)。

关于node.js - Nodejs : websocket routing based on URL without port proxying,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16409181/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com