请求应答模式
介绍
这是最基本的一个模式,很常用,一个请求一个应答,发送和接收必须配对。
示例说明
客户端发送一个字符串,然后接收服务端的应答;
服务端收到字符串后将其转换为大写返回给客户端;
代码
客户端
#include "zmq.hpp"
#include <string>
#include <iostream>
#include <algorithm>
int main()
{
zmq::context_t context(1);
zmq::socket_t socket(context, ZMQ_REQ);
socket.connect("tcp://127.0.0.1:7733");
std::string msg("hello");
socket.send(zmq::const_buffer(msg.c_str(), msg.size()));
std::cout << "request:" << msg << std::endl;
zmq::message_t recv_msg;
socket.recv(recv_msg);
std::cout << "response:" << recv_msg.to_string() << std::endl;
system("pause");
return 0;
}
服务端
#include "zmq.hpp"
#include <string>
#include <iostream>
#include <algorithm>
int main()
{
zmq::context_t context(1);
zmq::socket_t socket(context, ZMQ_REP);
socket.bind("tcp://127.0.0.1:7733");
while (1) {
try {
zmq::message_t msg;
socket.recv(msg);
std::string str_msg = msg.to_string();
std::cout << "recv:" << str_msg << std::endl;
std::transform(str_msg.begin(), str_msg.end(), str_msg.begin(), ::toupper);
zmq::const_buffer buffer(str_msg.c_str(), str_msg.size());
socket.send(buffer);
std::cout << "send:" << str_msg << std::endl;
} catch (zmq::error_t &e) {
std::cerr << "error:" << e.what() << std::endl;
zmq_sleep(1);
}
}
return 0;
}