2012-02-07 89 views
11

我想在Azure中的工作者角色上運行WebSocket服務器。在Windows Azure上運行Fleck(或任何)Websocket服務器

在模擬器上可以很好地在本地工作,但第一次運行套接字服務器時會出現一個Windows防火牆提示。

我想知道是否有人會知道如何克服有關Azure套接字的連接問題。

我的socket服務器實現:OnStart

var server = new WebSocketServer("ws://theappname.cloudapp.net:8080/"); 

server.Start(socket => 
{ 
    socket.OnOpen =() => 
    { 
     Trace.WriteLine("Connected to " + socket.ConnectionInfo.ClientIpAddress,"Information"); 
     _sockets.Add(socket); 
    }; 
}); 
.... etc 

客戶端實現:

var socket = new WebSocket("ws://theappname.cloudapp.net:8080"); 

socket.onopen = function() { 
    status.html("Connection Opened"); 
}; 
socket.onclose = function() { 
    status.html("Connection Closed"); 
} 

加載頁面後幾秒鐘的狀態更改爲closed


我對下面的工人角色的端點:

WebSocket Input http 8080 <Not Set>


我現在已經嘗試使用綁定到內部IP地址如下:

RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["WebSocket"].IPEndpoint.ToString();


解決方案

爲了在Azure上實現websockets時遇到此問題的任何人;

  1. 如果不是在端口80或8080上,您的防火牆可能會拒絕您的連接,因此請爲其創建單獨的部署。

  2. 爲了創建正確的防火牆規則,端點必須設置爲TCP而不是HTTP。 (見圖片)

Endpoint Configuration

+2

只是爲了試用,爲什麼不將輸入終點從「http」更改爲「tcp」協議。並明確設置本地端口爲8080(在你的情況下是)。另外,您必須記住,Windows Azure負載平衡器會終止任何閒置超過60秒的連接。 – astaykov 2012-02-08 07:48:24

+0

@astaykov - 您的評論導致解決方案,請在下面發佈,這樣我就可以+聲譽。謝謝。 – f0x 2012-02-09 09:36:40

+0

@astaykov你有完整的實現嗎?我試圖讓我的工作,並從未這樣做過。 – Yecats 2013-10-13 00:13:40

回答

8

只是爲了試用,爲什麼不把輸入端點從「http」更改爲「tcp」協議。並明確地設置本地端口爲8080(在你的情況下)。另外,您必須記住,Windows Azure負載平衡器會終止任何閒置時間超過60秒的連接,因此您可能需要實施某種「ping」解決方案以保持連接處於打開狀態。

+0

感謝您提供關於保持連接開放的其他意見,正在考慮類似的事情。 – f0x 2012-02-09 10:02:38

+0

我很高興能幫上忙! – astaykov 2012-02-09 10:04:15

+0

協議本身不是保持開放發送PING的連接嗎? – 2013-04-05 08:42:26

0

你可能想看看這個介紹視頻史蒂夫·馬克思(@smarx)放在一起上how to run node.js on Windows Azure

+0

謝謝,我已經廣泛使用node.js和socket.io;不幸的是,這不是我提出的上下文。 – f0x 2012-02-07 18:05:29

相關問題