/**************************************************************
技術博客
http://www.cnblogs.com/itdef/
技術交流羣
羣號碼:324164944
歡迎c c++ windows驅動愛好者 服務器程序員溝通交流
**************************************************************/
這兩張圖顯示了網絡結構的改變c++
客戶端與服務端的通信沒必要互相瞭解 各自只需鏈接到BROKER便可。程序員
兩張圖之間的變化 有許多細節須要注意 好比端點的ID 發送多部分組成信息 ZMQ_ROUTER ZMQ_DEALER的使用windows
以及使用ZMQ_POLL管理多連接服務器
可是此處僅僅使用zmq_proxy,將以上內容均封裝起來。網絡
上代碼frontend
// 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; }
// 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; }
// 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; }
還有使用zmq_proxy的天氣更新服務器的代碼,參考指南示例socket