• websocket-shap 函数Broadcast的使用方法


    Broadcast:在websocket-shap函数的定义是:向WebSocket服务中的每个客户端发送数据,类似于广播的效果

    如果要使用异步发送,可使用BroadcastAsync函数。

    在源码中的代码片段如下:

    //向WebSocket服务中的每个客户端发送string数据
     public void Broadcast (string data)
        {
          if (_state != ServerState.Start) {
            var msg = "管理器的当前状态为“未启动”|The current state of the manager is not Start.";
            throw new InvalidOperationException (msg);
          }
    
          if (data == null)
            throw new ArgumentNullException ("data");
    
          byte[] bytes;
          if (!data.TryGetUTF8EncodedBytes (out bytes)) {
            var msg = "无法进行utf-8编码|It could not be UTF-8-encoded.";
            throw new ArgumentException (msg, "data");
          }
    
          if (bytes.LongLength <= WebSocket.FragmentLength)
            broadcast (Opcode.Text, bytes, null);
          else
            broadcast (Opcode.Text, new MemoryStream (bytes), null);
        }
    //向WebSocket服务中的每个客户端发送stream数据 
    public void Broadcast (Stream stream, int length)
        {
          if (_state != ServerState.Start) {
            var msg = "The current state of the manager is not Start.";
            throw new InvalidOperationException (msg);
          }
    
          if (stream == null)
            throw new ArgumentNullException ("stream");
    
          if (!stream.CanRead) {
            var msg = "It cannot be read.";
            throw new ArgumentException (msg, "stream");
          }
    
          if (length < 1) {
            var msg = "Less than 1.";
            throw new ArgumentException (msg, "length");
          }
    
          var bytes = stream.ReadBytes (length);
    
          var len = bytes.Length;
          if (len == 0) {
            var msg = "No data could be read from it.";
            throw new ArgumentException (msg, "stream");
          }
    
          if (len < length) {
            _log.Warn (
              String.Format (
                "Only {0} byte(s) of data could be read from the stream.",
                len
              )
            );
          }
    
          if (len <= WebSocket.FragmentLength)
            broadcast (Opcode.Binary, bytes, null);
          else
            broadcast (Opcode.Binary, new MemoryStream (bytes), null);
        }
    //c# 调用方式:
    private
    void Broadcast(string msg, string type = "1") { var data = new JsonDto() { content = msg, type = type, name = "" }; //发送广播数据,每个在线的客户端都可以收到信息 Sessions.Broadcast(Newtonsoft.Json.JsonConvert.SerializeObject(data)); }
  • 相关阅读:
    源码浅析:MySQL一条insert操作,会写哪些文件?包括UNDO相关的文件吗?
    20201024 --各位码农,节日快乐
    Redis的基本使用
    Oracle 11g与12c的审计详解
    Mac 终端 Tomcat 环境配置过程
    Oracle查询如何才能行转列?-sunziren
    Redis命令大全
    MySQL8.0数据库基础教程(二)-理解&quot;关系&quot;
    mysql 5.7.28 中GROUP BY报错问题 SELECT list is not in GROUP BY clause and contains no
    Flink知识散点
  • 原文地址:https://www.cnblogs.com/innershare/p/10839492.html
Copyright © 2020-2023  润新知