我想在c#中構建一個在wan網絡中工作的聊天應用程序。 在應用程序中有2個方面。服務器端和客戶端。 在我看來,我認爲每個從客戶端到客戶端的消息都需要傳遞給服務器,服務器會將其轉發給正確的客戶端。客戶之間的溝通不會是直接的。 這是正確的模式? 如果是,服務器是否需要有一個可以偵聽所有客戶端的套接字? (因爲每個客戶端都將他的消息發送到服務器上的同一個端口)。 服務器可以處理同一端口上的數百萬條消息的管理嗎?全球聊天應用的正確編程模式是什麼?
回答
我認爲這是真的取決於你想要完成的任務,每一個選擇都有它的自己的優點和缺點。
例如:
使用中央服務器可以跟蹤消息,用戶在線等等,但是您將不得不爲每個連接管理端口(請參閱答案末尾的解釋以瞭解詳細信息)。
使用P2P模型,您不會擁有集中式服務器所需的瓶頸和管理,但再次管理非集中式系統可能更麻煩(取決於您要實現的目標)。
如果您要進行集中式設計,通常情況下,您將擁有一個端口可偵聽請求的服務器。
一旦用戶想要連接,服務器將爲客戶端啓動一個新線程,併爲他分配一個端口(線程通常來自線程池,端口來自特定的端口範圍)。
這將允許用戶以非阻塞的方式與服務器通話,並允許多個用戶同時使用該服務。
是的,我的方向是有中央服務器,也許在服務器端存儲一個端口,可以監聽連接請求等協議信息。並且短信將直接發送在客戶端之間?可以讓客戶端知道他正在與之通話的客戶端的公共IP嗎?您的意思是在服務器端爲每個客戶端提供一個uniqe端口? –
@AviThalker是的,我的意思是給一個獨特的端口從一個爲每個客戶端提供服務池關於讓每個客戶端知道客戶端的IP,這真的取決於您,例如Skype使用P2P,這意味着客戶端知道其他客戶端IP –
非常感謝!我想我會嘗試使用p2p在客戶端之間建立集中服務器,這樣文本/語音消息將直接在客戶端和協議消息之間傳輸,並將被髮送到服務器。 –
SignalR,因爲我讀的是網絡應用程序的權利?我正在建立的聊天不是一個網絡應用程序。 –
嗯,是的,沒有;-)你可以使用它在控制檯應用程序中自行託管。正如我在其他評論中看到的,您計劃使用中央服務器,那麼Web服務器或自託管應用程序將是一個很好的解決方案。 –
謝謝你我會考慮這種方式(: –
- 1. c#中的網絡聊天應用程序的正確方法是什麼
- 2. 氣球在聊天Android應用程序
- 3. 什麼是落後聊天Android應用
- 4. 聊天應用程序的服務器端應該是什麼?
- 5. 什麼是構建聊天應用程序的理想方法?
- 6. 什麼是全球::?
- 7. 什麼是最好的1-1聊天模式? (AJAX/CI/JQ)
- 8. 與tokbox全球視頻聊天指南
- 9. 「頻道」是什麼意思在Facebook聊天應用程序?
- 10. 本地測試視頻聊天應用程序的最佳方式是什麼?
- 11. 什麼是:全球(冒號全球)呢?
- 12. 什麼是正確的模式?
- 13. 什麼是正確的MVC模式?
- 14. F#Seq.next - 什麼是正確的模式?
- 15. 什麼是正確的文本模式?
- 16. 現場網絡聊天應用程序的正確工具
- 17. 以編程方式退出MFC應用程序的正確方法是什麼?
- 18. 正確使用Firebase連接來構建聊天應用程序
- 19. 在python qt5應用程序中線程的正確模式是什麼?
- 20. 適用於簡單聊天應用程序的設計模式
- 21. 用socket.io管理多個聊天室的正確方法是什麼?
- 22. 聊天應用程序 - 最佳方式
- 23. C2DM推式聊天應用程序
- 24. 以下函數式編程模式的正確術語是什麼?
- 25. 聊天應用程序。消息的結尾應該是什麼字符
- 26. 聊天框工作?這是正確的方式嗎?
- 27. 什麼是在全球WP_Query
- 28. 跨應用程序創建標題導航的正確模式是什麼?
- 29. 什麼是MVP應用程序模式?
- 30. Android聊天應用程序
很多方法可以做到這一點。您應該查看非阻塞IO解決方案,如node.js和vert.x. – duffymo