在 Azure 上运行 Node JS websocket

问题描述

服务器应用在 Heroku 上运行良好,但迁移到 Azure 后,服务器无法启动。

这是代码..


const PORT = process.env.PORT || 2498;
const INDEX = '/index.html';

const server = express()
  .use((req,res) => res.sendFile(INDEX,{ root: __dirname }))
  .listen(PORT,() => console.log(`We\'re live on channel : ${PORT}`));

const wss = new Server({ server });

wss.on('connection',(ws) => {
  console.log('Client connected');

  ws.on('close',() => console.log('Client disconnected'));

  ws.on('message',(message) =>{
    // this stays within the server
    console.log('[SERVER]: Received a message => %s',message );

})

})```

.........


Clients connected are returning not establish an handshake ....

解决方法

Azure web app only supports the exposure of port 80 and 443 for website access.

我之前的需求和测试结果:

我认为你的问题是一个典型的问题。之前也有相关需求,在webapp中测试失败。 Azure 应用服务的所有文档,说到websocket,都是使用SignalR。我也测试了signalr服务,成功了,但是这个服务是免费的,目前只支持20个客户端连接。

之前的想法是创建一个console程序,放到webjob中,让webjob提供websocket服务,但最后都失败了。

因为azure webapp运行在沙盒环境,并且只开放了80和443端口,所以不能做更多的配置。很明显,你的websocket服务启动的端口是2498,所以不支持。

建议

如果一定要使用websocket,不管是什么编程语言,都必须支持自定义端口开放,比如使用虚拟机。

您可以比较azure云服务和虚拟机的费用。哪一种适合你,哪一种适合你。

另外一个建议,你可以购买第三方内网穿透工具,使用固定的IP或URL,比如ngrok,这样就可以把websocket服务放到你公司的内部服务器上。 (测试有效)。

在这三个选项中,内网渗透可能是最具成本效益的选择。您可以根据自己的需要选择。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...