簡體   English   中英

C ++:一個客戶端與多個服務器通信

[英]C++: One client communicating with multiple server

我想知道,是否可以讓一個客戶端同時與多台服務器通信。 據我所知,像firefox這樣的通用瀏覽器正是在這樣做。

我現在遇到的問題是,客戶端必須偵聽並等待來自服務器的數據,而不是自己請求。 它必須一次收聽多個服務器。 這有可能嗎? 如果客戶端正在偵聽服務器1,而服務器2發送消息,會發生什么情況? 包裹丟失了還是會重新發送,直到客戶傳達成功的收據? 使用的協議是TCP。

編輯:平台是Windows。 感謝您指出這個問題。

這與使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM