【发布时间】:2016-03-30 02:16:30
【问题描述】:
我正在使用NodeJS 和socket.IO 开发多人国际象棋游戏。
我在 Azure 上托管它时遇到了问题。我尝试了许多不同的方法,其中提到了一些:
通过添加以下代码强制应用程序仅使用 WebSocket:
io.configure(function() {
io.set('transports', ['websocket']);
});
在web.config 文件中添加了<webSocket enabled="false"/>..
注意:这会禁用 IIS WebSockets 模块,该模块包括它自己的 WebSockets 实现,并与 Node.js 特定的 WebSocket 模块(如 Socket.IO)发生冲突。如果此行不存在或设置为 true,这可能是 WebSocket 传输不适用于您的应用程序的原因。
匹配源协议以确保没有 SSL 问题。
io.configure(function() {
io.set('match origin protocol', true);
});
我现在从头开始,因为我认为我的服务器端部分已损坏,并尝试了 Socket.io chat example。
- 我按照步骤操作。
- 在 Azure 上创建了一个新的 Web 应用程序。
- 通过 FileZilla FTP 发布了我的文件。
- 在 Azure 上为我的应用启用 Web Sockets(默认禁用)。
还是一样的错误!见下图。
有人吗?我不确定这是客户端问题还是服务器端问题。似乎它正在尝试 XHR 轮询而不是使用网络套接字..
提前致谢。
【问题讨论】:
-
这是 Azure Web 应用吗?另外,只是为了确认,这在本地有效吗?我有一个使用 Node 和 Socket.io 的快速部署按钮示例。里面的东西可能会有所帮助。 github.com/christopheranderson/node-chat-sample
-
Azure Web 应用程序,是的。这在本地有效(聊天示例和我的国际象棋游戏),忘记添加了。感谢您的样品,我会检查一下。
-
我没有看到任何明显的错误表明您做错了,这意味着这可能是一件微妙的事情。试试我的示例,看看您是否看到类似的问题。由于您可能正在上传 node_modules 而不是使用 CI(节点版本 4.x.x 及更高版本存在本机模块支持),因此请确保您在本地和您的网络应用程序上具有匹配的节点版本。
-
没有持续集成,只是手动上传。在我上传之前,我确保我通过执行
npm init生成了一个新的packages.json,所以它应该匹配.. -
需要刷新的是
node_modules。你可以使用npm update来刷新你的包。 docs.npmjs.com/cli/update
标签: node.js azure socket.io azure-web-app-service