예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
                        }
                    }
                }
            }
        }
예제 #3
0
 /// <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
         }));
     }
 }
예제 #4
0
        /// <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);
        }
예제 #5
0
        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();
        }