最近用delphi做一個tcp的通訊程式,第一次弄tcp,是一個服務器要和多個客戶端(1000個以內)連接通信,我看了delphi7下的哪個netchat的例程,里面用到的是delphi自帶的tcpsever和tcpclient組件,但只是實作了一對一的通信,那如何實作一對多的通信呢?網上說是要在tcpsever端用多執行緒處理,但不知如何創建多個接收處理執行緒,會的大俠能否指點一下,有代碼最好,謝謝。
uj5u.com熱心網友回復:
idtcpsever自己已經有多執行緒了 不過是阻塞的 ,數量級比較小的并發訪問里,直接在idtcpsever的excute方法里 處理好資源訪問沖突就可以了uj5u.com熱心網友回復:
參考一下這里的socket例子吧:http://download.csdn.net/detail/geoff08zhang/4571358
uj5u.com熱心網友回復:
用idtcpserver把,同步方式的開發方便,但不適合處理大量客戶端連接,因為內部是一個連接一個執行緒處理,執行緒過多了時間都浪費在執行緒切換上。或者自己處理可以使用訊息模式的或者事件模式的。windows下iocp是性能最好的。
uj5u.com熱心網友回復:
1000個連接,那東西估計困難了uj5u.com熱心網友回復:
這要看你的作業環境是局域網還是廣域網。如果是局域網,或許你可以用 UDP 方式從服務端向所有客戶端廣播發送,這要看你的應用是什么。UDP 廣播是效率最高的傳送方式。要是廣域網,你就無法采用 UDP 廣播。正像樓上所說,想以 TCP 方式支持1000個連接很困難。一種通融的辦法是采用多埠把1000個連接分散開,但是你的服務器必須得支持多埠。
uj5u.com熱心網友回復:
tcpsever 可以連接多個客戶端,你先創建一個先進先出的環形緩沖區,然后為每個客戶端創建一個緩沖區,來了資料后保存到對應的緩沖區,然后在搞一個獨立的執行緒來處理緩沖區中的資料.
uj5u.com熱心網友回復:
1000個連接要走異步方式。用iocp模型輕輕松松支持。uj5u.com熱心網友回復:
IdTCPServer也可以搞定1000個鏈接的吧uj5u.com熱心網友回復:
idTCPServer走阻塞模式,1000個連接就要1000個執行緒。作業系統花在這些執行緒上的背景關系切換就是個巨大的耗費,更別說你還是服務器端,還要提供很多計算服務了。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/149070.html
標籤:網絡通信/分布式開發
上一篇:求教關于rmp報表的問題
