C ++:一个客户端与多个服务器通信

时间:2016-05-30 09:24:39

标签: c++ windows tcp client-server

我想知道,是否可以让一个客户端同时与多个服务器通信。据我所知,像firefox这样的常见浏览器就是这样做的。

我现在遇到的问题是,客户端必须侦听并等待来自服务器的数据,而不是自己请求数据。它必须立即监听多个服务器。这甚至可能吗?如果客户端正在侦听服务器1而服务器2发送了什么,会发生什么?包裹是丢失还是会重新发送,直到客户通知成功接收?使用的协议是TCP。

编辑:平台是Windows。感谢你指出Arunmu。

1 个答案:

答案 0 :(得分:0)

这与使用select / poll / epoll的常规套接字编程或使用线程池或使用每个进程的进程或您知道的任何模型没什么不同。
我可以向您展示一个关于如何使用epoll执行此操作的粗略伪代码。 注意:我的所有函数都不存在于C ++中,仅用于解释目的。我还假设您使用Linux,因为您没有提及该平台。

socket sd = connect("server.com", 8080);
sd.set_nonblocking(1);
epoll_event event;
event.data.fd = sd
epoll_ctl(ADD, event);
...
...
while (True) {
  auto n = epoll_wait(events, 1);
  for (int i : 1...n) {
    if (events[i].data.fd == sd) // The socket added in epoll_ctl
    {
      std::thread(&Session::read_handler, rd_hndler_, sd); // Call the read in another thread or same thread
    }
  }
}

我希望你有这个要点。本质上,将服务器视为客户端和服务器之类的客户端,并解决您的问题(种类)。请查看以下链接,了解有关epoll的更多信息 https://banu.com/blog/2/how-to-use-epoll-a-complete-example-in-c/

要使用epoll查看功能齐全的服务器设计,请结帐:
https://github.com/arun11299/cpp-reactor-server/blob/master/epoll/reactor.cc