我想在 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);
如果我在 localhost 中部署此 node.js 服务器代码,我可以使用终端作为测试客户端成功地向 TCP 服务器发送和接收聊天
nc localhost 5000
但是,如果我在 heroku 中部署此服务器代码,我将无法再与服务器建立 tcp 连接。
我的理解是服务器将在 process.env.PORT 监听。
所以我首先追踪了服务器正在监听的这个端口,例如30134。
然后如果我尝试以这种方式连接:
nc http://my-heroku-app.herokuapp.com 30134
什么都没发生。
我想我在某个地方有一些基本的误解。谁能指导我?在heroku服务器上可以进行真正的TCP套接字聊天吗?