2015-12-23 38 views
2

我正在使用NodeJSsocket.IO进行多人国际象棋游戏。Socket.io + Azure网络套接字问题

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

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

新增<webSocket enabled="false"/>

通过添加以下代码强制应用程序只使用WebSockets在web.config文件..

注意:这将禁用IIS的WebSockets模块,其中包括:是它自己的WebSocket实现,并与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套接字(默认情况下禁用)。

enter image description here


仍是同样的错误!见下图。

enter image description here

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

在此先感谢。

+1

这是Azure Web Apps吗?另外,只是为了确认,这在当地适用?我有一个使用Node和Socket.io的快速部署按钮。那里有东西可能会有所帮助。 https://github.com/christopheranderson/node-chat-sample –

+0

Azure Web应用程序,是的。这适用于本地(聊天示例和我的国际象棋游戏),忘了补充说明。感谢您的示例我会检查出来。 – urbz

+0

我没有看到任何明显的你做错了,这意味着它可能是一个微妙的事情。尝试我的示例,看看你是否看到类似的问题。由于您大概上传node_modules而不是使用配置项(本机模块对节点版本4.x.x及更高版本存在本地模块支持),因此请确保本地和您的Web应用程序上具有匹配的节点版本。 –

回答

2

我明白了,谢谢Chris Anderson-MSFT的帮助。

使用FTP进行部署时发生的奇怪事情是我的node_modules文件夹与我的package.json中指定的版本不同。

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

我还需要加强我的客户端的socket-IO通过指定的运输方法使用的网络套接字:

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); 
}); 
+1

在FTP中,您可以随时尝试使用错误的程序包来解决问题,因为您的问题是使用Kudu上的调试控制台来删除node_modules文件夹并从Kudu运行npm install。很高兴你解决它,@urbz! –

+0

谢谢你的提示@ ChrisAnderson-MSFT – urbz