2015-12-23 72 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