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)); }