/// <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); }
void ReplyData(byte[] data) { var dt = SAEASerialize.Deserialize <DataInfo>(data); OnReceive?.Invoke(dt); var userIDs = _storage.GetChannelUsers(dt.ChannelID); Parallel.ForEach(userIDs, (id) => { BaseReply(id, ProtocalType.Data, dt.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); }
protected void OnReceived(byte[] data) { ((RCoder)_RContext.Unpacker).Unpack(data, msg => { switch ((RSocketMsgType)msg.Type) { case RSocketMsgType.Ping: break; case RSocketMsgType.Pong: break; case RSocketMsgType.Request: break; case RSocketMsgType.Response: _syncHelper.Set(msg.SequenceNumber, msg.Data); break; case RSocketMsgType.Notice: OnNoticed.Invoke(msg.Data); break; case RSocketMsgType.Error: ExceptionCollector.Add("Consumer.OnReceived Error", new Exception(SAEASerialize.Deserialize <string>(msg.Data))); _syncHelper.Set(msg.SequenceNumber, msg.Data); break; case RSocketMsgType.Close: break; } }); }
protected void OnReceived(byte[] data) { try { _rUnpacker.Unpack(data, msg => { switch ((RSocketMsgType)msg.Type) { case RSocketMsgType.Ping: break; case RSocketMsgType.Pong: break; case RSocketMsgType.Request: break; case RSocketMsgType.Response: _disorderSyncHelper.Set(msg.SequenceNumber, msg.Data); break; case RSocketMsgType.Notice: OnNoticed.Invoke(msg.Data); break; case RSocketMsgType.Error: ExceptionCollector.Add("Consumer.OnReceived Error", new Exception(SAEASerialize.Deserialize <string>(msg.Data))); _disorderSyncHelper.Set(msg.SequenceNumber, msg.Data); break; case RSocketMsgType.Close: break; } }); } catch (Exception ex) { OnError?.Invoke(_client.Endpoint.ToString(), ex); } }
private static void RpcServiceProxy_OnNoticed(byte[] serializeData) { ConsoleHelper.WriteLine($"RPCServiceProxy 收到服务推送的消息: {SAEASerialize.Deserialize<string>(serializeData)}"); }
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(); }