配置服务


  WebSocket 的宿主服务可以是多种形式的,下面将分别进行说明。


1、Asp.Net Web 或 Asp.Net MVC

  在 Global.cs 的 Application_Start 方法里使用 WebSocketBuildOption 的单例进行配置。如下所示:

public class Global : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        //心跳检测时间间隔
        WebSocketBuildOption.Default.HeartbeatInterval = TimeSpan.FromSeconds(10);
        WebSocketBuildOption.Default.ReceiveBufferSize = 4 * 1024;
        WebSocketBuildOption.Default.KeepAliveInterval = TimeSpan.FromSeconds(10);
        //添加处理器
        WebSocketBuildOption.Default.MapHandler<NotifyHandler>("/wsNotify");
        WebSocketBuildOption.Default.MapHandler<ChatHandler>("/wsChat");
    }
}

2、.Net Core

  在 Startup.Configure 方法里使用 UseWebSockets 方法进行配置,如下所示:

namespace demo
{
    public class Startup
    {
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            app.UseWebSockets(options =>
            {
                //心跳检测时间间隔
                options.HeartbeatInterval = TimeSpan.FromSeconds(10);
                options.ReceiveBufferSize = 4 * 1024;
                options.KeepAliveInterval = TimeSpan.FromSeconds(10);
                //添加处理器
                options.MapHandler<NotifyHandler>("/wsNotify");
                options.MapHandler<ChatHandler>("/wsChat");
            });
        }
    }
}

3、Console、Windows Forms 或 Windows Services

  可以使用 WebSocketServer 类来启动一个 Http 服务,监听 WebSocket 的请求。如下所示:

static class Program
{
    [STAThread]
    static async Task Main()
    {
        var option = new WebSocketBuildOption();
        option.HeartbeatInterval = TimeSpan.FromSeconds(10);
        option.ReceiveBufferSize = 4 * 1024;
        option.KeepAliveInterval = TimeSpan.FromSeconds(10);
        await new WebSocketServer("http://127.0.0.1:8001", option).Start<NotifyHandler>();
    }
}

💡 参数说明

  • HeartbeatInterval: 心跳检测时间间隔。比如指定为 10 秒,则每 10 秒钟检测一次心跳,如果 3 次检测不到心跳则自动断开连接。
  • HeartbeatTryTimes: 心跳检测的容错次数,默认为 3 次。如果 3 次检测不到心跳则自动断开连接。
  • ReceiveBufferSize: 接收数据的缓冲区大小。
  • KeepAliveInterval: 设置 WebSocket 的 keep-alive 值。
  • Encoding: 设置字符编码,默认为 UTF-8。
  • Formatter: 设置消息格式化器。
  • AppKey: 设置应用标识,用于会话隔离。
  • AliveKey: 服务器标识,用于集群下 WebSocket 主机的唯一标识,初始化时自动生成,不建议更改。