虽然关于部署会非常简单,也没有太多细节可以说。而了解一些相关性资料,这对于优化非常有帮助。

支持问题

我不知道算不算在澄清一个事实,那便是按微软给出的文档中必须是IIS8+才支持WebSocket协议,但好多资料文章都写着可以运用第三方扩展,我找过,但连接扩展文件的连接都失效。

WebSocket协议安装

默认情况下IIS是不会自动安装WebSocket协议的,介绍WIN8和WIN12的安装办法

web.config的 <webSocket> 节点

当IIS支持WebSocket协议后,我们就可以在web.config里面的 system.webServer/webSocket 下配置:

  • enabled:启用是否支持WebSocket。

  • pingInterval:WebSocket有支持ping/pong,用于持续连接(keep-alive)、心跳、网络状态检测、延迟测量等。但目前好像很多浏览器没有支持这一特性。

  • receiveBufferLimit:接收数据的缓存区大小。默认:4194304B。

SignalR 配置

Startup.cs 中,我们可以调用 GlobalHost.Configuration 来配置一些参数,以便于更高效的使用SignalR。

DefaultMessageBufferSize

用于缓冲消息数量,默认值:每个连接的每个Hub缓冲1000条。言下之意就是,当我们大量群发消息时,假如我们同一时刻向2000个用户发送消息,这可能会由于客户端接收响应比较慢,可能会倒置只有1500个用户会收到消息。

所以我们可以调整这个数字更大。方法也很简单:

GlobalHost.Configuration.DefaultMessageBufferSize = 2000;

对于大数据量的发送这种办法不非是完美的解决办法,最好是通过发送Ack包来检查是否发送成功,然后有节制性的逐批发送。

MaxIncomingWebSocketMessageSize

允许最大接收消息大小,默认是64KB。

IIS配置

WebSocket本身是一个协议,所以长连接或短连接这取决于IIS的配置。正因为如此,还得了解一下IIS上几个重要指标的配置。比如:每个应用程序的并发请求量、应用池请求队列大小等等。

参考资料

查看 SignalR系列文章