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