c# - 在 Windows Azure 上运行 Fleck(或任何)Websocket 服务器

标签 c# azure websocket

我想在 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>

<小时/>

我现在尝试使用以下命令绑定(bind)到内部 IP 地址:

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

<小时/>

解决方案

为了在 Azure 上实现 Websocket 时遇到此问题的其他人;

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

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

Endpoint Configuration

最佳答案

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

关于c# - 在 Windows Azure 上运行 Fleck(或任何)Websocket 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9177089/

相关文章:

c# - 在页面加载时隐藏 div 标签

azure - 问 : Azure Cosmos DB Graph: How to run queries in Graph API when Indexing Policy is defined as Manual?

类似 Azure Functions 的解决方案,能够运行 Win32 桌面应用程序

websocket - SignalR/Websockets 连接限制和最佳实践

ssl - 用于 HTTP 而非 WebSocket 的 HAProxy SSL 重定向

c# - 显示字符串 ASP.NET C# 的保存文件对话框?

c# - 使用 C# 中的 Gdal 库将 shapefile 转换为 kml

c# - 如何将实体从一个 Entity Framework 上下文复制到另一个 Entity Framework 上下文?

azure - 经典虚拟机和 Azure 中的虚拟机有什么区别?

r - R 中的 Websocket