自托管信号器是否需要Windows Server 2012才能使用websockets?

时间:2013-07-30 21:41:41

标签: signalr

自托管应用程序似乎没有运行IIS,因此它需要特定的操作系统才能在服务器端启用Web套接字?

3 个答案:

答案 0 :(得分:23)

浏览器会支持它,因为它们已在内部实现了协议,大多数浏览器都不会使用操作系统传输库,因此即使操作系统不直接支持它,它们也能够使用WebSockets。

Windows 8/2012之前的HTTP.SYS has no built in support for WebSockets,因此虽然.NET 4.5包含WebSocket类,但除非您在Windows 8/2012上运行.NET 4.5+,否则它们将无法工作,这将影响自我在Windows中运行的主机解决方案< 8。

实现驻留在.NET和IIS8刚刚利用的操作系统代码中。 .NET类只是将调用包装到HTTP.SYS,因此它会在没有底层支持的操作系统上抛出异常。

当自托管时,您可以使用自己的内部Web套接字服务器,例如Fleck,并告诉SignalR您实际上支持Web套接字而不管您的操作系统。

在自托管应用程序中启动Fleck服务器(their site上的示例),例如,您可以为 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版本。

答案 1 :(得分:2)

我已经确定通过快速测试现在不支持websockets。我创建了一个自托管中心,然后是一个快速的jquery客户端。在我的Windows 8机器上,查询字符串显示了websockets,在服务器2008 r2上显示了长时间的轮询...

答案 2 :(得分:0)

是的,它需要Windows Server 2012检查以下SignalR Supported Platforms

的引用
  

SignalR服务器组件可以托管在以下服务器中   客户端操作系统。请注意,对于SignalR来说,使用WebSockets,   需要Windows Server 2012或Windows 8(只要站点的.NET框架版本设置为4.5,并且在站点的“配置”页面中启用了Web套接字),就可以在Windows Azure网站上使用WebSocket。

还可以很好地阅读为什么可以找到here