Beispiel #1
0
        /// <summary>
        /// 启动订阅客户端
        /// </summary>
        public void StartDealerClient()
        {
            Task task = new Task(() =>
            {
                // 创建推送消息的Socket
                using (var client = new ZeroMQ.ZSocket(ZeroMQ.ZSocketType.DEALER))
                {
                    client.Identity = Encoding.UTF8.GetBytes("Client1");
                    client.Connect("tcp://127.0.0.1:1003");
                    while (true)
                    {
                        if (isClosing)
                        {
                            using (var content = new ZeroMQ.ZFrame("Quit"))
                            {
                                client.SendFrame(content);
                            }
                            break;
                        }
                        using (var content = new ZeroMQ.ZFrame("Task " + DateTime.Now.TimeOfDay.ToString()))
                        {
                            client.SendFrame(content);
                        }
                        Thread.Sleep(10000);
                    }
                    Console.WriteLine("DealerClient is Closed.");
                }
            });

            task.Start();
        }
Beispiel #2
0
        /// <summary>
        /// 启动发布服务器
        /// </summary>
        public void StartPubServer()
        {
            Task task = new Task(() =>
            {
                // 创建发布服务的Socket
                using (var server = new ZeroMQ.ZSocket(ZeroMQ.ZSocketType.PUB))
                {
                    server.Bind("tcp://127.0.0.1:1001");
                    while (true)
                    {
                        if (isClosing)
                        {
                            using (var quit = new ZeroMQ.ZFrame("Quit"))
                            {
                                server.SendFrame(quit);
                            }
                            break;
                        }
                        using (var head = new ZeroMQ.ZFrame("Time"))
                        {
                            server.SendFrameMore(head);
                        }
                        using (var body = new ZeroMQ.ZFrame(DateTime.Now.TimeOfDay.ToString()))
                        {
                            server.SendFrame(body);
                        }
                        Thread.Sleep(2000);
                    }
                    Console.WriteLine("PubServer is Closed.");
                }
            });

            task.Start();
        }
Beispiel #3
0
        /// <summary>
        /// 启动消息推送客户端
        /// </summary>
        public void StartPushClient()
        {
            Task task = new Task(() =>
            {
                // 创建推送消息的Socket
                using (var client = new ZeroMQ.ZSocket(ZeroMQ.ZSocketType.PUSH))
                {
                    client.Connect("tcp://127.0.0.1:1002");
                    while (true)
                    {
                        if (isClosing)
                        {
                            using (var content = new ZeroMQ.ZFrame("Quit"))
                            {
                                client.SendFrame(content);
                            }
                            break;
                        }
                        using (var content = new ZeroMQ.ZFrame("Push->" + DateTime.Now.TimeOfDay.ToString()))
                        {
                            client.SendFrame(content);
                        }
                        Thread.Sleep(2000);
                    }
                    Console.WriteLine("PushClient is Closed.");
                }
            });

            task.Start();
        }
Beispiel #4
0
        /// <summary>
        /// 启动订阅客户端
        /// </summary>
        public void StartDealerWorker(string id)
        {
            Task task = new Task(() =>
            {
                using (var worker = new ZeroMQ.ZSocket(ZeroMQ.ZSocketType.DEALER))
                {
                    worker.Identity = Encoding.UTF8.GetBytes(id);
                    worker.Connect("tcp://127.0.0.1:1004");
                    using (var content = new ZeroMQ.ZFrame("hello"))
                    {
                        worker.SendFrame(content);
                    }
                    while (true)
                    {
                        if (isClosing)
                        {
                            using (var quit = new ZeroMQ.ZFrame("Quit"))
                            {
                                worker.SendFrame(quit);
                            }
                            break;
                        }
                        using (var msg = worker.ReceiveMessage())
                        {
                            var content = msg[0].ReadString();
                            Console.WriteLine("Begin Working->" + content);
                            using (var info = new ZeroMQ.ZFrame("i am working..."))
                            {
                                worker.SendFrame(info);
                            }
                        }
                    }
                    Console.WriteLine("BackendClient is Closed.");
                }
            });

            task.Start();
        }
Beispiel #5
0
        /// <summary>
        /// 启动路由服务器
        /// </summary>
        public void StartRouterServer()
        {
            var front   = new ZeroMQ.ZSocket(ZeroMQ.ZSocketType.ROUTER);
            var backend = new ZeroMQ.ZSocket(ZeroMQ.ZSocketType.ROUTER);

            Task taskFront = new Task(() =>
            {
                int i = 0;
                front.Bind("tcp://127.0.0.1:1003");
                while (true)
                {
                    if (isClosing)
                    {
                        break;
                    }
                    using (var msg = front.ReceiveMessage())
                    {
                        var id = msg[0].ReadString();
                        Console.WriteLine("Received From Client:{0}", id);
                        var content  = "Do Work->" + msg[1].ReadString();
                        var replyMsg = "No Worker";
                        if (workerList.Count > 0)
                        {
                            if (i > workerList.Count - 1)// 负载均衡工人
                            {
                                i = 0;
                            }
                            using (var head = new ZeroMQ.ZFrame(workerList[i]))
                            {
                                backend.SendFrameMore(head);
                            }
                            using (var body = new ZeroMQ.ZFrame(content))
                            {
                                backend.SendFrame(body);
                            }
                            replyMsg = "Beging Working...";
                            i++;
                        }
                        using (var reply = new ZeroMQ.ZFrame(replyMsg))
                        {
                            front.SendFrame(reply);
                        }
                    }
                }
                front.Close();
                Console.WriteLine("FrontServer is Closed.");
            });
            Task taskBacend = new Task(() =>
            {
                backend.Bind("tcp://127.0.0.1:1004");
                while (true)
                {
                    if (isClosing)
                    {
                        break;
                    }
                    // 接收工人上线消息
                    using (var msg = backend.ReceiveMessage())
                    {
                        var worker = msg[0].ReadString();
                        var info   = msg[1].ReadString();
                        if (info == "Quit")
                        {
                            workerList.Remove(worker);
                        }
                        if (!workerList.Contains(worker))
                        {
                            workerList.Add(worker);
                        }
                        Console.WriteLine("{0} is standby, Msg:{1}", worker, info);
                    }
                }
                backend.Close();
                Console.WriteLine("BackendServer is Closed.");
            });

            taskFront.Start();
            taskBacend.Start();
        }