Socket.io + Azurenetworking套接字问题

我正在与NodeJS和socket.IO一起玩多人国际象棋游戏。

我有问题托pipe它在Azure寿..我尝试了很多不同的方法,提到几个:

通过添加下面的代码强制应用程序只使用WebSockets:

io.configure(function() { io.set('transports', ['websocket']); }); 

web.config文件中添加了<webSocket enabled="false"/>

注意 :这将禁用IIS WebSockets模块,该模块包含自己的WebSocket实现,并与Node.js特定的WebSocket模块(如Socket.IO)冲突。 如果这行不存在,或设置为true,这可能是WebSocket传输不适用于您的应用程序的原因。

匹配原始协议以确保没有SSL问题。

 io.configure(function() { io.set('match origin protocol', true); }); 

我现在从头开始,因为我认为我的服务器端部分已损坏,而是尝试使用Socket.io聊天示例 。

  • 我遵循了这些步骤。
  • 在Azure上创build了一个新的Web应用程序。
  • 通过FileZilla FTP发布我的文件。
  • 在Azure上启用我的应用程序的Web套接字(默认情况下禁用)。

在这里输入图像说明


仍然是同一个错误! 见下图。

在这里输入图像说明

任何人? 我不确定这是客户端还是服务器端问题。 它似乎是试图XHR轮询,而不是使用networking套接字..

提前致谢。

我得到了它的工作,谢谢克里斯·安德森 – 微软的帮助。

使用FTP进行部署时出现的奇怪现象是我的node_modules文件夹与我的package.json指定的版本不同。

我通过将Azure上的Web应用程序连接到本地Git存储库并通过git部署应用程序来解决此问题。 这将recursion连接我的包,并匹配正确的版本。

我还需要通过指定传输方法来强制我的客户端socket-io使用web套接字:

 var socket = io({transports:['websocket']}); 

这就是我的服务器端文件结果如下:

 var express = require('express'); var app = express(); var server = require('http').createServer(app); var io = require('socket.io')(server); var port = process.env.PORT || 3000; app.use(express.static('public')); app.get('/', function(req, res) { res.sendFile(__dirname + '/public/default.html'); }); io.on('connection', function(socket) { io.set('transports', ['websocket']); console.log('new connection on socket.io'); socket.on('move', function(msg) { socket.broadcast.emit('move', msg); }); }); server.listen(port, function () { console.log('Server listening at port %d', port); });