2012-06-14 39 views
2

我試圖創建一個使用Node.js在Windows Azure上運行的websocket服務器。這應該很簡單,但我遇到了問題,我無法在任何地方找到解決方案。在Azure上使用node.js的Websocket服務器

這是我的服務器端代碼:

var ws = require('websocket.io') 
    , http = require('http').createServer().listen(process.env.PORT) 
    , server = ws.attach(http) 

server.on('connection', function (socket) { 
    socket.on('message', function() { }); 
    socket.on('close', function() { }); 
}); 

我怎麼知道我需要連接到哪個端口? 我的客戶端代碼:

var ws = new WebSocket("ws://socketiopuge.azurewebsites.net"); 

ws.onopen = function() { 
    alert("opened"); 
}; 

ws.onmessage = function(msg) { 
    alert(msg); 
}; 

ws.onclose = function() { 
    alert("closed"); 
}; 

當我運行代碼,我得到一個501錯誤代碼,並onclode事件。我相信問題是我需要在創建WebSocket時指定一個端口號。你們中的任何一個人都能指引我走向正確的方向嗎謝謝!

回答

1

如果您使用的是新的Azure網站,它們還不支持websocket。所有通過IIS-node.js託管的網站也是如此。

您目前支持Azure中的websockets的唯一方法是使用worker角色並提供您自己的node.js可執行文件。

4

關於您的問題「如何知道我需要連接哪個端口」,您需要創建一個輸入端點併爲其設置適當的端口。配置完成後,您將在代碼中使用相同的端口進行綁定和使用。

這裏是關於Running socket.io on Windows Azure Web and Worker roles

如果主機socket.io在Windows Azure的Web角色,請由於Windows Azure的Web角色上IIS7運行禁用服務器上的WebSockets運輸,網絡插座不支持的例子IIS7呢。使用工作角色您不必擔心它,您可以直接使用Web套接字。

+1

我認爲負載平衡器規則仍然適用,所以休眠WebSocket每60秒會被禁止,除非它以某種方式ping通? – silijon

+0

我在丟棄websocket連接時遇到問題 - 60年代的超時仍然適用? – bjornl