2014-01-22 49 views
0

我想在c#中構建一個在wan網絡中工作的聊天應用程序。 在應用程序中有2個方面。服務器端和客戶端。 在我看來,我認爲每個從客戶端到客戶端的消息都需要傳遞給服務器,服務器會將其轉發給正確的客戶端。客戶之間的溝通不會是直接的。 這是正確的模式? 如果是,服務器是否需要有一個可以偵聽所有客戶端的套接字? (因爲每個客戶端都將他的消息發送到服務器上的同一個端口)。 服務器可以處理同一端口上的數百萬條消息的管理嗎?全球聊天應用的正確編程模式是什麼?

+1

很多方法可以做到這一點。您應該查看非阻塞IO解決方案,如node.js和vert.x. – duffymo

回答

0

我認爲這是真的取決於你想要完成的任務,每一個選擇都有它的自己的優點和缺點。
例如:

使用中央服務器可以跟蹤消息,用戶在線等等,但是您將不得不爲每個連接管理端口(請參閱答案末尾的解釋以瞭解詳細信息)。

使用P2P模型,您不會擁有集中式服務器所需的瓶頸和管理,但再次管理非集中式系統可能更麻煩(取決於您要實現的目標)。

如果您要進行集中式設計,通常情況下,您將擁有一個端口可偵聽請求的服務器。
一旦用戶想要連接,服務器將爲客戶端啓動一個新線程,併爲他分配一個端口(線程通常來自線程池,端口來自特定的端口範圍)。
這將允許用戶以非阻塞的方式與服務器通話,並允許多個用戶同時使用該服務。

+0

是的,我的方向是有中央服務器,也許在服務器端存儲一個端口,可以監聽連接請求等協議信息。並且短信將直接發送在客戶端之間?可以讓客戶端知道他正在與之通話的客戶端的公共IP嗎?您的意思是在服務器端爲每個客戶端提供一個uniqe端口? –

+0

@AviThalker是的,我的意思是給一個獨特的端口從一個爲每個客戶端提供服務池關於讓每個客戶端知道客戶端的IP,這真的取決於您,例如Skype使用P2P,這意味着客戶端知道其他客戶端IP –

+0

非常感謝!我想我會嘗試使用p2p在客戶端之間建立集中服務器,這樣文本/語音消息將直接在客戶端和協議消息之間傳輸,並將被髮送到服務器。 –

0

看看SignalR和聊天系統中實現使用SignalR,Jabbr:

http://signalr.net/

http://about.jabbr.net/

+0

SignalR,因爲我讀的是網絡應用程序的權利?我正在建立的聊天不是一個網絡應用程序。 –

+0

嗯,是的,沒有;-)你可以使用它在控制檯應用程序中自行託管。正如我在其他評論中看到的,您計劃使用中央服務器,那麼Web服務器或自託管應用程序將是一個很好的解決方案。 –

+0

謝謝你我會考慮這種方式(: –

相關問題