【问题标题】:Running Fleck (or any) Websocket server on Windows Azure在 Windows Azure 上运行 Fleck(或任何)Websocket 服务器
【发布时间】:2012-02-28 22:19:22
【问题描述】:

我想在 Azure 中以辅助角色运行 WebSocket 服务器。

这在模拟器本地运行良好,但套接字服务器第一次运行时会出现 Windows 防火墙提示。

我想知道是否有人知道如何解决与 Azure 上的套接字有关的连接问题。

我的套接字服务器实现: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 上实现 websocket 时遇到这个问题;

  1. 如果不在端口 80 或 8080 上,您的防火墙可能会拒绝您的连接,因此请为其创建单独的部署。

  2. 端点必须设置为 TCP 而不是 HTTP,才能创建正确的防火墙规则。 (见图)

【问题讨论】:

  • 只是为了试用,你为什么不把你的输入端点从“http”更改为“tcp”协议。并将本地端口显式设置为 8080(在您的情况下为 )。此外,您必须记住,Windows Azure 负载均衡器会终止任何空闲超过 60 秒的连接。
  • @astaykov - 您的评论导致了解决方案,请在下面发布,以便我可以信任您。谢谢。
  • @astaykov 你有完整的实现吗?我正在努力让我的工作,以前从未这样做过。

标签: c# azure websocket


【解决方案1】:

只是为了试用,为什么不将输入端点从“http”更改为“tcp”协议。并将本地端口显式设置为 8080 (在您的情况下是 )。此外,您必须记住,Windows Azure 负载均衡器会终止任何空闲超过 60 秒的连接,因此您可能需要实施某种“ping”解决方案来保持连接打开。

【讨论】:

  • 感谢有关保持连接打开的其他 cmets,正在考虑类似的事情。
  • 连接保持打开状态不是通过协议本身发送 PING 吗?
  • 协议本身不会发送任何内容。协议只是纸面上的定义。必须处理这些事情的是协议实现。因此,如果您打开套接字并且不发送任何内容,则连接将被终止。
【解决方案2】:

您可能想看看史蒂夫·马克思 (@smarx) 在how to run node.js on Windows Azure 上制作的这个介绍性视频。

【讨论】:

  • 谢谢,我与 node.js 和 socket.io 进行了广泛的合作;不幸的是,这不是我所呈现的上下文。
猜你喜欢
  • 1970-01-01
  • 2012-08-17
  • 2013-07-30
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
  • 2011-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多