2012-02-07 53 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

相关问题