/// <summary> /// 反转到具体的方法上 /// </summary> /// <param name="IUserToken"></param> /// <param name="msg"></param> /// <returns></returns> public static byte[] Reversal(IUserToken IUserToken, RSocketMsg msg) { byte[] result = null; object[] inputs = null; if (msg.Data != null) { var serviceInfo = RPCMapping.Get(msg.ServiceName, msg.MethodName); if (serviceInfo == null) { throw new RPCNotFundException($"找不到服务:{msg.ServiceName}/{msg.MethodName}"); } var ptypes = serviceInfo.Pamars.Values.ToArray(); inputs = SAEASerialize.Deserialize(ptypes, msg.Data); } var r = Reversal(IUserToken, msg.ServiceName, msg.MethodName, inputs); if (r != null) { return(SAEASerialize.Serialize(r)); } return(result); }
/// <summary> /// 向注册了接收通知的rpc client 发送通知 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="t"></param> public void Notice <T>(T t) { if (t != null) { var list = _noticeCollection.GetList().GetAwaiter().GetResult(); if (list != null && list.Any()) { var data = SAEASerialize.Serialize(t); var msg = new RSocketMsg(RSocketMsgType.Notice, null, null, data) { SequenceNumber = UniqueKeyHelper.Next() }; foreach (var item in list) { try { _RServer.Reply(item, msg); } catch (Exception ex) { LogHelper.Warn("ServiceProvider.Notice 出现异常", ex); } } } } }
/// <summary> /// 发送语音数据 /// </summary> /// <param name="channelID"></param> /// <param name="data"></param> public void SendData(string channelID, byte[] data) { if (!string.IsNullOrEmpty(channelID)) { BaseSend(ProtocalType.Data, SAEASerialize.Serialize(new DataInfo() { ChannelID = channelID, Data = data })); } }
/// <summary> /// 调用远程RPC /// </summary> /// <typeparam name="T"></typeparam> /// <param name="serviceName"></param> /// <param name="method"></param> /// <param name="args"></param> /// <returns></returns> public T RemoteCall <T>(string serviceName, string method, params object[] args) { T t = default(T); byte[] abytes = null; if (args != null) { abytes = SAEASerialize.Serialize(args); } var data = _consumerMultiplexer.Request(serviceName, method, abytes, _retry); if (data != null) { t = SAEASerialize.Deserialize <T>(data); } return(t); }
static void SerializeTest() { var groupInfo = new GroupInfo() { GroupID = 1, IsTemporary = false, Name = "yswenli group", Created = DateTimeHelper.Now, Creator = new UserInfo() { ID = 1, Birthday = DateTimeHelper.Now.AddYears(-100), UserName = "******" }, Users = new System.Collections.Generic.List <UserInfo>() { new UserInfo() { ID = 1, Birthday = DateTimeHelper.Now.AddYears(-100), UserName = "******" } } }; var count = 100000; var len1 = 0; var len2 = 0; Stopwatch sw = new Stopwatch(); sw.Start(); List <byte[]> list = new List <byte[]>(); for (int i = 0; i < count; i++) { var bytes = SerializeBinary(groupInfo); len1 = bytes.Length; list.Add(bytes); } ConsoleHelper.WriteLine($"BinaryFormatter实体序列化平均:{count * 1000 / sw.ElapsedMilliseconds} 次/秒"); sw.Restart(); for (int i = 0; i < count; i++) { var obj = DeSerializeBinary(list[i]); } ConsoleHelper.WriteLine($"BinaryFormatter实体反序列化平均:{count * 1000 / sw.ElapsedMilliseconds} 次/秒"); ConsoleHelper.WriteLine($"BinaryFormatter序列化生成bytes大小:{len1 * count * 1.0 / 1024 / 1024} Mb"); list.Clear(); sw.Restart(); for (int i = 0; i < count; i++) { var bytes = SAEASerialize.Serialize(groupInfo); len2 = bytes.Length; list.Add(bytes); } ConsoleHelper.WriteLine($"ParamsSerializeUtil实体序列化平均:{count * 1000 / sw.ElapsedMilliseconds} 次/秒"); sw.Restart(); for (int i = 0; i < count; i++) { var obj = SAEASerialize.Deserialize <GroupInfo>(list[i]); } ConsoleHelper.WriteLine($"ParamsSerializeUtil实体反序列化平均:{count * 1000 / sw.ElapsedMilliseconds} 次/秒"); ConsoleHelper.WriteLine($"ParamsSerializeUtil序列化生成bytes大小:{len2 * count * 1.0 / 1024 / 1024} Mb"); sw.Stop(); }