private void dataServer() { NetMQContext ctx = NetMQContext.Create(); NetMQ.Sockets.ResponseSocket dataSender = ctx.CreateResponseSocket(); dataSender.Bind("tcp://*:5565"); Debug.Log("Enter while.. "); while (isRunning) { string message = dataSender.ReceiveString(); print("Got request message: " + message); // re-run scene iteration if true if (doGatherOnRequest) { gatherSceneData(); } switch (message) { case "header": print("Send Header.. "); dataSender.Send(headerByteData); print(string.Format(".. Nodes ({0} bytes) sent ", headerByteData.Length)); break; case "nodes": print("Send Nodes.. "); dataSender.Send(nodesByteData); print(string.Format(".. Nodes ({0} bytes) sent ", nodesByteData.Length)); break; case "objects": print("Send Objects.. "); dataSender.Send(objectsByteData); print(string.Format(".. Objects ({0} bytes) sent ", objectsByteData.Length)); break; case "textures": print("Send Textures.. "); dataSender.Send(texturesByteData); print(string.Format(".. Textures ({0} bytes) sent ", texturesByteData.Length)); break; default: break; } } dataSender.Unbind("tcp://127.0.0.1:5565"); dataSender.Close(); }
/// <summary> /// 启动服务,开始接收消息 /// </summary> /// <param name="Consumer">线程数</param> /// <returns></returns> public bool StartService(int Consumer) { if (IsRunning) { return(false); } Logger.Debug($"{this.ServiceName} 启用线程数量:{Consumer}"); //向路由注册服务 var initial_res = _InitializeService(); if (initial_res?.Success == true) { Logger.Info($"{this.ServiceName} 服务模块注册成功"); for (int i = 0; i < Consumer; i++) { NetMQ.Sockets.ResponseSocket response = new NetMQ.Sockets.ResponseSocket(); response.Connect($"{ServerAddress.IP}:{initial_res.Port}"); response.ReceiveReady += Response_ReceiveReady; /* 修正客户端无法异步请求的问题 * 每一个REP必须使用独立的一条线程 * 当REP收到请求之后,只有回复以后才能接受下一个请求 * 如果所有Consumer(REP)都正在工作,则其他请求就会挂起 * 所以最大同时请求数量受Consumer的影响 */ var poller = new NetMQPoller() { response, new NetMQTimer(Timeout) }; poller.RunAsync(); _pollerList.Add(poller); _sockList.Add(response); IsRunning = true; } } else { Logger.Error($"{this.ServiceName} 路由注册服务失败!"); } return(IsRunning); }
/// <summary> /// 启动服务,开始接收消息 /// </summary> /// <param name="Consumer">消费者数量</param> /// <returns></returns> public bool StartService(int Consumer) { if (IsRunning) { return(false); } var initial_res = Initialize(); if (initial_res?.Success == true) { for (int i = 0; i < Consumer; i++) { NetMQ.Sockets.ResponseSocket response = new NetMQ.Sockets.ResponseSocket(); response.Connect($"{ServerAddress.IP}:{initial_res.Port}"); response.ReceiveReady += Response_ReceiveReady; /* 修正客户端无法异步请求的问题 * 每一个REP必须使用独立的一条线程 * 当REP收到请求之后,只有回复以后才能接受下一个请求 * 如果所有Consumer(REP)都正在工作,则其他请求就会挂起 * 所以最大同时请求数量受Consumer的影响 */ var poller = new NetMQPoller() { response, new NetMQTimer(Timeout) }; poller.RunAsync(); _pollerList.Add(poller); _sockList.Add(response); IsRunning = true; } } return(IsRunning); }