2009-10-24 61 views
0

我得到了一個C++非阻塞服務器套接字,所有的客戶端存儲在一個std :: map結構中。C++發送數據到多個UDP套接字

我可以調用每個clientObject的send()方法來向連接的客戶端發送一些東西,這已經很好了。

但是爲了向所有人發送消息(廣播?)我想知道: 有什麼比爲所有客戶端執行for/loop並調用ClientObject-> send(「foo」)每次迭代更好?

或者我應該試試看多播套接字?

在此先感謝。 抹布。

+2

你有沒有考慮過使用ASIO庫? http://asio.sourceforge.net/ – 2009-10-24 03:30:37

+0

ASIO庫如何幫助OP? – Tom 2009-10-24 06:05:55

回答

1

如果您通過局域網進行通信,則組播只是一個選項。它不會在互聯網上工作。

您可能想要在這裏執行的操作是使用異步I/O解複用套接字。這允許您同時將數據發送到多個套接字,並使用異步事件處理程序來處理每個傳輸。

我會建議尋找Boost ASIO的便攜式方式來做到這一點。您也可以使用操作系統特定的系統調用(例如UNIX上的poll/select或Linux上的epoll)來執行此操作,但它要複雜得多。

+0

由於某些限制以及大多數網絡管理員通常會忘記的一些正確的路由器配置,因此組播在Internet上運行。僅舉一個例子,您可以收聽高品質的廣播或通過多播廣播觀看BBC的高質量電視:http://www.bbc.co.uk/multicast/ – Juliano 2009-10-24 01:24:58

1

只要您在談論本地節點,即在局域網上的「廣播/多播」域中,組播將會更加可取。

當然,有組播分發協議可以使這些消息更廣泛地傳播,但它們很少使用,根據具體情況,您可能/不可靠性取決於此類設施。

多播的使用轉化爲從發送者的角度來節省大量費用:只需要發送一個發送操作而不是n * send。

0

除非你有那些非常昂貴的交換機,否則你最好是對每個主機進行udp單播。是的,對於大多數交換機而言,廣播/多播實際上可能比較慢,對於那些比您的個人電腦具有更強大CPU的交換機。做簡單轉發以外的任何事情都會大大減慢它們的速度。

做一個基準找出。

0

異步套接字編程絕對是走的路! :)