自托管应用程序似乎不运行 IIS,那么它是否需要特定的操作系统才能在服务器端启用 Web 套接字?
3 回答
浏览器会支持它,因为它们已经在内部实现了协议,大多数浏览器不会使用操作系统传输库,因此即使操作系统不直接支持它,它们也可以使用 WebSockets。
Windows 8/2012 之前的 HTTP.SYS没有对 WebSockets 的内置支持,因此尽管 .NET 4.5 包含 WebSocket 类,但除非您在 Windows 8/2012 上运行 .NET 4.5+,否则它们将无法工作,这将影响自在 Windows < 8 中运行的托管解决方案。
该实现驻留在 .NET 和 IIS8 刚刚利用的操作系统代码中。.NET 类只是将调用封装到 HTTP.SYS,因此它会在没有底层支持的操作系统上引发异常。
但是,当自托管时,您可以使用自己的内部 Web 套接字服务器,例如Fleck,并告诉 SignalR,无论您的操作系统如何,您实际上都支持 Web 套接字。
在您的自托管应用程序中启动Fleck服务器(他们网站上的示例),作为示例,您可以为PersistentConnection自托管执行此操作:
public override Task ProcessRequest(HostContext context)
{
// Override what SignalR will be telling you internally and point to your own Web Socket Server.
context.Items[HostConstants.SupportsWebSockets] = true;
context.Items[HostConstants.WebSocketServerUrl] = "ws://localhost:3000";
return base.ProcessRequest(context);
}
免责声明:这是一个未记录的功能,SignalR 的开发人员告诉我,这在库的未来版本中可能是不可能的。请记住,您还需要满足保持活动状态并将数据序列化为 JSON,以便它与 SignalR 客户端配合得很好。它在 1.1.3 版本中仍然有效。
通过快速测试,我确定现在不支持 websocket。我创建了一个自托管集线器,然后创建了一个快速 jquery 客户端。在我的 Windows 8 机器上,查询字符串显示 websockets,在服务器 2008 r2 上显示长轮询......
是的,它需要 windows server 2012 检查下面来自SignalR Supported Platforms的报价
SignalR 服务器组件可以托管在以下服务器或客户端操作系统中。请注意,SignalR 要使用 WebSockets,需要 Windows Server 2012 或 Windows 8(WebSocket 可以在 Windows Azure 网站上使用,只要站点的 .NET 框架版本设置为 4.5,并且在站点的配置中启用了 Web Sockets页)。
也很好地阅读了为什么可以在这里找到