zoukankan      html  css  js  c++  java
  • 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)); }
  • 相关阅读:
    4.Linux的目录结构
    使用idea创建spring mvc项目图文教程
    传统的Servlet在spring boot中怎么实现的?
    springboot系列教程导学篇
    记录一次序列化引起的问题解决办法 查看已编译类序列化值
    springboot支付项目之springboot集成jpa
    springboot支付项目之日志配置
    设计模式之状态模式总结篇
    看了这个Java实习生入职测试题后,幸亏我不是实习生
    幂等性学习及接口的幂等性
  • 原文地址:https://www.cnblogs.com/innershare/p/10839492.html
Copyright © 2011-2022 走看看