private static void TestMsgPack(int count) { //msgpack MessagePackObjectDictionary dict = new MessagePackObjectDictionary(); //var key1 = new MsgPack.MessagePackObject("key1"); //var value1 = new MsgPack.MessagePackObject(new byte[] { 1, 2, 3, 4, 5 }); dict["key1"] = new byte[] { 1, 2, 3, 4, 5 }; var key2 = new MsgPack.MessagePackObject("key2"); dict[key2] = 12345; dict["adfadf"] = "adfasdf"; ArraySegment <byte> bytes; //byte[] bytes = null; //var serializer = MsgPack.Serialization.MessagePackSerializer.Get<MessagePackObjectDictionary>(); //上面的方法比下面的少做一次转换,可能更合适 MsgPack.MessagePackObject obj = new MsgPack.MessagePackObject(dict); DateTime begin = DateTime.Now; for (var i = 0; i < count; i++) { bytes = PackSeg(obj); //bytes = serializer.PackSingleObject(obj); } var time1 = DateTime.Now; { var time = (time1 - begin).TotalSeconds; var speed = count / time; Console.WriteLine("msgpack.pack bytes=" + bytes.Count + ", time=" + time + ", speed(c/s)=" + speed); } for (var i = 0; i < count; i++) { //var obj2 =serializer.UnpackSingleObject(bytes); var obj2 = UnPackSeg(bytes); //看起来上面的方法比下面这个更快一点点 //var obj2 = serializer.UnpackSingleObject(bytes); var num = obj2.AsDictionary()["key2"].AsInt32(); } var time2 = DateTime.Now; { var time = (time2 - time1).TotalSeconds; var speed = count / time; Console.WriteLine("msgpack.unpack bytes=" + bytes.Count + ", time=" + time + ", speed(c/s)=" + speed); } }
// Client thread which does not block Update() void NetMQClient() { string IPHeader = ">tcp://" + IP + ":"; var timeout = new System.TimeSpan(0, 0, 1); //1sec // Necessary to handle this NetMQ issue on Unity editor // https://github.com/zeromq/netmq/issues/526 AsyncIO.ForceDotNet.Force(); NetMQConfig.ManualTerminationTakeOver(); NetMQConfig.ContextCreate(true); string subport = ""; Debug.Log("Connect to the server: " + IPHeader + PORT + "."); var requestSocket = new RequestSocket(IPHeader + PORT); double t = 0; const int N = 1000; bool is_connected = false; for (int k = 0; k < N; k++) { var sw = new System.Diagnostics.Stopwatch(); sw.Start(); requestSocket.SendFrame("SUB_PORT"); is_connected = requestSocket.TryReceiveFrameString(timeout, out subport); sw.Stop(); t = t + sw.Elapsed.Milliseconds; //Debug.Log("Round trip time:" + sw.Elapsed + "[sec]."); if (is_connected == false) { break; } } Debug.Log("Round trip average time:" + t / N + "[msec]."); requestSocket.Close(); if (is_connected) { // var subscriberSocket = new SubscriberSocket(IPHeader + subport); subscriberSocket.Subscribe(ID); var msg = new NetMQMessage(); while (is_connected && stop_thread_ == false) { Debug.Log("Receive a multipart message."); is_connected = subscriberSocket.TryReceiveMultipartMessage(timeout, ref (msg)); if (is_connected) { Debug.Log("Unpack a received multipart message."); try { //Debug.Log(msg[0].ConvertToString()); var message = MsgPack.Unpacking.UnpackObject(msg[1].ToByteArray()); MsgPack.MessagePackObject mmap = message.Value; lock (thisLock_) { data_ = JsonUtility.FromJson <Pupil.PupilData3D>(mmap.ToString()); } //Debug.Log(message); } catch { Debug.Log("Failed to unpack."); } } else { Debug.Log("Failed to receive a message."); Thread.Sleep(1000); } } subscriberSocket.Close(); } else { Debug.Log("Failed to connect the server."); } // Necessary to handle this NetMQ issue on Unity editor // https://github.com/zeromq/netmq/issues/526 Debug.Log("ContextTerminate."); NetMQConfig.ContextTerminate(); }
static void runobserveNodes() { var linkto = "127.0.0.1:1892"; var node = new Node(null, linkto, null, true);//观察节点 node.actor.beObserver = true; var pipeline = node.sys.GetPipeline(null, "this/node"); while (pipeline.IsVaild) { Console.WriteLine("localCmd a1=a系统的plevel(5)联向b系统的plevel(6) a2=>:a系统的plevel(5)联向b系统的plevel(5) a3=a系统的plevel(5)联向b系统的plevel(2)"); Console.WriteLine("localCmd b1=断开a系统的plevel(5)到b系统的plevel(6)连接 b2=>:断开a系统的plevel(5)到b系统的plevel(5)连接 b3=断开a系统的plevel(5)联向b系统的plevel(2)连接"); var line = Console.ReadLine(); if (string.IsNullOrEmpty(line) == false) { if (line == "exit") { //node.actor.Dispose(); node.sys.Dispose(); break; } if (line == "a1" || line == "a2" || line == "a3" || line == "b1" || line == "b2" || line == "b3") { switch (line) { case "a1": { var msg = node.actor.makeCmd_SendMsg("127.0.0.1:1895", node.actor.makeCmd_ConnectTo("127.0.0.1:2896")); var localcmd = node.actor.makeCmd_FakeRemote(msg); pipeline.Tell(localcmd); } break; case "a2": { var msg = node.actor.makeCmd_SendMsg("127.0.0.1:1895", node.actor.makeCmd_ConnectTo("127.0.0.1:2895")); var localcmd = node.actor.makeCmd_FakeRemote(msg); pipeline.Tell(localcmd); } break; case "a3": { var msg = node.actor.makeCmd_SendMsg("127.0.0.1:1895", node.actor.makeCmd_ConnectTo("127.0.0.1:2892")); var localcmd = node.actor.makeCmd_FakeRemote(msg); pipeline.Tell(localcmd); } break; case "b1": { var msg = node.actor.makeCmd_SendMsg("127.0.0.1:1895", node.actor.makeCmd_DisconnectTo("127.0.0.1:2896")); var localcmd = node.actor.makeCmd_FakeRemote(msg); pipeline.Tell(localcmd); } break; case "b2": { var msg = node.actor.makeCmd_SendMsg("127.0.0.1:1895", node.actor.makeCmd_DisconnectTo("127.0.0.1:2895")); var localcmd = node.actor.makeCmd_FakeRemote(msg); pipeline.Tell(localcmd); } break; case "b3": { var msg = node.actor.makeCmd_SendMsg("127.0.0.1:1895", node.actor.makeCmd_DisconnectTo("127.0.0.1:2892")); var localcmd = node.actor.makeCmd_FakeRemote(msg); pipeline.Tell(localcmd); } break; } } else { var cmds = line.Split(' ', StringSplitOptions.RemoveEmptyEntries); var dict = new MsgPack.MessagePackObjectDictionary(); dict["cmd"] = (UInt16)AllPet.Module.CmdList.Local_Cmd; var list = new MsgPack.MessagePackObject[cmds.Length]; for (var i = 0; i < cmds.Length; i++) { list[i] = cmds[i]; } dict["params"] = list; pipeline.Tell(new MsgPack.MessagePackObject(dict)); } } } }