zoukankan      html  css  js  c++  java
  • zeromq学习记录(四)使用ZMQ_ROUTER ZMQ_DEALER

    /**************************************************************
    技术博客
    http://www.cnblogs.com/itdef/
     
    技术交流群
    群号码:324164944
     
    欢迎c c++ windows驱动爱好者 服务器程序员沟通交流
    **************************************************************/

    这两张图显示了网络结构的改变

    客户端与服务端的通讯不必互相了解 各自只需连接到BROKER即可。

    两张图之间的变化 有许多细节需要注意 比如端点的ID 发送多部分组成信息  ZMQ_ROUTER ZMQ_DEALER的使用

    以及使用ZMQ_POLL管理多链接

    但是此处仅仅使用zmq_proxy,将以上内容均封装起来。

    上代码

    // client.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include "zhelpers.hpp"
    
    int main()
    {
        zmq::context_t context(1);
    
        zmq::socket_t requester(context, ZMQ_REQ);
        requester.connect("tcp://localhost:5559");
    
        for (int request = 0; request < 10; request++) {
    
            s_send(requester, "Hello");
            std::string string = s_recv(requester);
    
            std::cout << "Received reply " << request
                << " [" << string << "]" << std::endl;
        }
        return 0;
    }
    View Code
    // broker.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include "zhelpers.hpp"
    
    int main(int argc, char *argv[])
    {
        zmq::context_t context(1);
    
        //  Socket facing clients
        zmq::socket_t frontend(context, ZMQ_ROUTER);
        frontend.bind("tcp://*:5559");
    
        //  Socket facing services
        zmq::socket_t backend(context, ZMQ_DEALER);
        backend.bind("tcp://*:5560");
    
        //  Start the proxy
        zmq::proxy(frontend, backend, nullptr);
        return 0;
    }
    View Code
    // worker.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include "zhelpers.hpp"
    
    
    int main()
    {
        zmq::context_t context(1);
    
        zmq::socket_t responder(context, ZMQ_REP);
        responder.connect("tcp://localhost:5560");
    
        while (1)
        {
            //  Wait for next request from client
            std::string string = s_recv(responder);
    
            std::cout << "Received request: " << string << std::endl;
    
            // Do some 'work'
            Sleep(1);
    
            //  Send reply back to client
            s_send(responder, "World");
    
        }
        return 0;
    }
    View Code

     还有使用zmq_proxy的天气更新服务器的代码,参考指南示例

  • 相关阅读:
    day12 Python操作rabbitmq及pymsql
    day11 队列、线程、进程、协程及Python使用缓存(redis/memcache)
    day10 Python作用域 Python2.7与Python3.x的类继承的区别、异步IO、多进程,多线程简介
    day09 Python socket编程
    day08 面向对象补充及单例模式
    day07 configparser xml subprocess 面向对象
    day06 Python的一些内建变量、反射、hashlib模块、re模块、os模块、sys模块
    day05 Python多层装饰器、模块、序列化、字符串格式化、生成器和迭代器、递归、time、datetime模块、logging模块
    day04 Python一些内置函数及装饰器
    查看旧版jexus命令
  • 原文地址:https://www.cnblogs.com/itdef/p/5347363.html
Copyright © 2011-2022 走看看