C# 在WebSocket 服务端使用Fleck

Fleck 

Fleck 是 C# 中的 WebSocket 服务器实现。Fleck 是Nugget项目的分支 ,不需要继承、容器或其他引用。

Fleck 不依赖于HttpListenerHTTP.sys意味着它可以在 Windows 7 和 Server 2008 主机上运行。WebSocket 备注 - Microsoft Docs

https://github.com/statianzo/Fleck

例子

以下是将回显给客户端的示例。

var server = new WebSocketServer("ws://0.0.0.0:8181");
server.Start(socket =>
{
  socket.OnOpen = () => Console.WriteLine("Open!");
  socket.OnClose = () => Console.WriteLine("Close!");
  socket.OnMessage = message => socket.Send(message);
});

支持的 WebSocket 版本

Fleck 支持多种现代网络浏览器的 WebSocket 版本

  • Hixie-Draft-76/Hybi-00(Safari 5、Chrome < 14、Firefox 4(启用时))
  • Hybi-07(火狐 6)
  • Hybi-10(Chrome 14-16、Firefox 7)
  • Hybi-13(Chrome 17+、Firefox 11+、Safari 6+、Edge 13+(?))

安全 WebSockets (wss://)

启用安全连接需要两件事:使用 schemewss而不是ws,并将 Fleck 指向包含公钥和私钥的 x509 证书

var server = new WebSocketServer("wss://0.0.0.0:8431");
server.Certificate = new X509Certificate2("MyCert.pfx");
server.Start(socket =>
{
  //...use as normal
});

制作证书时遇到问题?请参阅 @AdrianBathurst创建 x509 的指南

子协议协商

要启用子协议协商,请在属性上指定支持的协议WebSocketServer.SupportedSubProtocols。协商的子协议将在套接字的ConnectionInfo.NegotiatedSubProtocol.

如果在客户端请求(Sec-WebSocket-Protocol 标头)中找不到支持的子协议,连接将被关闭。

var server = new WebSocketServer("ws://0.0.0.0:8181");
server.SupportedSubProtocols = new []{ "superchat", "chat" };
server.Start(socket =>
{
  //socket.ConnectionInfo.NegotiatedSubProtocol is populated
});

自定义日志记录

Fleck 可以登录到 Log4Net 或任何其他第三方日志系统。只需FleckLog.LogAction用所需的行为覆盖该属性。

ILog logger = LogManager.GetLogger(typeof(FleckLog));

FleckLog.LogAction = (level, message, ex) => {
  switch(level) {
    case LogLevel.Debug:
      logger.Debug(message, ex);
      break;
    case LogLevel.Error:
      logger.Error(message, ex);
      break;
    case LogLevel.Warn:
      logger.Warn(message, ex);
      break;
    default:
      logger.Info(message, ex);
      break;
  }
};

禁用 Nagle 算法

设置NoDelaytrue_WebSocketConnection.ListenerSocket

var server = new WebSocketServer("ws://0.0.0.0:8181");
server.ListenerSocket.NoDelay = true;
server.Start(socket =>
{
  //Child connections will not use Nagle's Algorithm
});

侦听错误后自动重启

设置RestartAfterListenErrortrue_WebSocketConnection

var server = new WebSocketServer("ws://0.0.0.0:8181");
server.RestartAfterListenError = true;
server.Start(socket =>
{
  //...use as normal
});
 

 

posted @   多见多闻  阅读(3359)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示