我想使用C ++在服务器和多个客户端进程之间使用套接字设置进程间通信。服务器和所有客户端进程将在同一台Windows 7计算机上运行。目的是由服务器保存std::vector
数据并传输给每个客户端。有时,服务器保存的向量将使用更多数据元素进行扩展(push_back()
),并且需要将额外数据传输到每个客户端。任何人都可以提供链接到如何执行此操作的示例,相关参考资料或简单的“玩具”代码示例吗?
std::vector
吗?每个客户端都需要指出它已经传递了哪个元素索引,服务器只会提供客户端尚未拥有的那些元素。
答案 0 :(得分:2)
如果要控制tcp / udp图层上方的协议,请尝试libevent或Boost.Asio。如果您对能够传递消息更感兴趣,请查看ZeroMQ或AMQP之类的内容。
使用ZeroMQ的服务器示例
#include <iostream>
#include <zmq.hpp>
int main(int argc, const char* argv[])
{
// create a ZeroMQ network context using 1 thread
zmq::context_t ctx(1);
// We are 'UPSTREAM' i.e. a receiver
zmq::socket_t sock(ctx, ZMQ_UPSTREAM);
sock.connect("tcp://localhost:12345");
zmq::message_t msg;
while (sock.recv(&msg)) {
std::cout << "rx: " << (const char*)msg.data() << std::endl;
}
}
答案 1 :(得分:0)
如果进程始终在同一服务器上运行,您可以考虑使用Boost.Interprocess而不是套接字来处理通信。