当前位置:   article > 正文

c#Fleck的使用 (WebSocket)_c# fleck

c# fleck

nuget包直接搜索fleck

在webapi里直接写

  1. public Task<string> customerwebsocket(string code)
  2. {
  3. Guid guid = System.Guid.NewGuid();
  4. var allSockets = new List<IWebSocketConnection>();
  5. var server = new WebSocketServer("ws://127.0.0.1:6001");
  6. server.Start(socket =>
  7. {
  8. socket.OnOpen = () =>
  9. {
  10. //连接成功
  11. //添加连接人
  12. allSockets.Add(socket);
  13. //连接成功
  14. };
  15. socket.OnMessage = message =>
  16. {
  17. //接受消息
  18. //所有连接发消息
  19. allSockets.ToList().ForEach(s => s.Send("客户端 Echo: " + message));
  20. };
  21. socket.OnClose = () =>
  22. {
  23. //断开连接
  24. };
  25. //关闭连接
  26. socket.Close();
  27. });
  28. return Task.FromResult("ws://127.0.0.1:6001");
  29. }

侦听错误后自动重启 

 设置为RestartAfterListenErrortrueWebSocketConnection设置为RestartAfterListenErrortrueWebSocketConnection

server.RestartAfterListenError = true;
  1. 启用安全连接需要两件事:改用方案 的 ,并将 Fleck 指向一个 x509 证书,该证书包含一个 public 和 私钥wssws
  2. var server = new WebSocketServer("wss://0.0.0.0:8431");
  3. server.Certificate = new X509Certificate2("MyCert.pfx");
  4. server.Start(socket =>
  5. {
  6. //...use as normal
  7. });
  8. 制作证书时遇到问题?请参阅本指南https://github.com/statianzo/Fleck/issues/214#issuecomment-364413879

 

 fleck向单人发送消息

  1. //定义全局字典
  2. private Dictionary<string, IWebSocketConnection> socketCache = new Dictionary<string, IWebSocketConnection>();
  3. //在socket.OnMessage接收到消息后向外发送
  4. //messages["code"].ToString()为回传的接收人id
  5. //Dictionary<string, IWebSocketConnection> string类型为自定义的GUID
  6. //IWebSocketConnection 为 socket方法
  7. socketCache.Where(a => a.Key == messages["code"].ToString()).ToList().ForEach(a => a.Value.Send(connectionInfo.Id.ToString() + "消息" + messages["busiessesID"].ToString()));

H5端接收

WebSocket 属性

以下是 WebSocket 对象的属性。假定我们使用了以上代码创建了 Socket 对象:

属性描述
Socket.readyState

只读属性 readyState 表示连接状态,可以是以下值:

  • 0 - 表示连接尚未建立。

  • 1 - 表示连接已建立,可以进行通信。

  • 2 - 表示连接正在进行关闭。

  • 3 - 表示连接已经关闭或者连接不能打开。

Socket.bufferedAmount

只读属性 bufferedAmount 已被 send() 放入正在队列中等待传输,但是还没有发出的 UTF-8 文本字节数。

WebSocket 事件

以下是 WebSocket 对象的相关事件。假定我们使用了以上代码创建了 Socket 对象:

事件事件处理程序描述
openSocket.onopen连接建立时触发
messageSocket.onmessage客户端接收服务端数据时触发
errorSocket.onerror通信发生错误时触发
closeSocket.onclose连接关闭时触发

WebSocket 方法

以下是 WebSocket 对象的相关方法。假定我们使用了以上代码创建了 Socket 对象:

方法描述
Socket.send()

使用连接发送数据

Socket.close()

关闭连接

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8" />
  5. <title></title>
  6. </head>
  7. <body>
  8. <div>消息</div>
  9. </body>
  10. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
  11. <script>
  12. $.ajax({
  13. type: "post",
  14. url:"http://localhost:8000/api/app/busiesses-login/websockets",
  15. data:{
  16. "code":"123"
  17. },
  18. success:function(res){
  19. const url = res.data
  20. console.log(url)
  21. var sock = new WebSocket(url);//此时的值:ws://127.0.0.1:6001
  22. sock.onopen = function(e){
  23. //连接成功
  24. console.log(e)
  25. }
  26. sock.onmessage = function (e) {
  27. //接收消息
  28. console.log(e.data)
  29. };
  30. sock.onclose = function(e){
  31. //关闭
  32. console.log(e)
  33. }
  34. //每隔两秒发送一次消息
  35. setInterval(()=>{
  36. sock.send("123")
  37. },2000)
  38. }
  39. })
  40. </script>
  41. </html>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/164656?site
推荐阅读
相关标签
  

闽ICP备14008679号