gpt4 book ai didi

node.js - 简单的 TCP 套接字聊天服务器在 heroku 上不起作用

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

我想在heroku上构建一个node.js聊天服务器,聊天客户端将是iOS应用程序。

我的第一次尝试是基于socket.io构建一个服务器。它可以工作,但我不喜欢 iOS 应用程序使用长轮询而不是 websocket 或 tcp 套接字与服务器通信。

所以我的第二次尝试是使用真正的TCP套接字构建服务器,代码如下:

var net = require('net');

var sockets = [];

var server = net.createServer(function(socket){
sockets.push(socket);
socket.on('data', function (data) {
for(var i=0; i< sockets.length; i++)
{
sockets[i].write(data);
}
});
socket.on('end', function() {
var i = sockets.indexOf(socket);
sockets.splice(i, 1);
})
});

var port = process.env.PORT || 5000;
console.log("server listening to port " + port);
server.listen(port);

如果我在本地主机中部署此 Node.js 服务器代码,我可以使用终端作为测试客户端成功向 TCP 服务器发送和接收聊天

nc localhost 5000

但是,如果我在heroku中部署此服务器代码,我将无法再与服务器建立tcp连接。

我的理解是服务器将监听 process.env.PORT。

所以我首先追踪出服务器正在监听的端口,例如30134。

那么如果我尝试以这种方式连接:

nc http://my-heroku-app.herokuapp.com 30134

没有任何反应。

我认为我在某些地方存在一些根本性的误解。有人可以指导我吗? Heroku 服务器上可以进行真正的 TCP 套接字聊天吗?

最佳答案

Heroku 不支持 websocket。例如,这就是为什么 socket.io 需要强制使用 xhr-polling。 (参见https://devcenter.heroku.com/articles/using-socket-io-with-node-js-on-heroku)。

您可以使用像 socket.io 这样支持多种传输的东西,而不是直接使用套接字。

这是因为他们使用旧版本的 nginx,它没有完整的 Web 套接字支持。

另外,您的应用程序正在监听的端口,例如30134 由 nginx 从端口 80 上的 heroku 主机名代理到 heroku 内部网络上的应用程序端口。

关于node.js - 简单的 TCP 套接字聊天服务器在 heroku 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15243342/

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