我們有客戶端 - 服務器應用程序,所有的客戶端也可以通過TCP互相交談(TcpClient的+的TcpListener每個客戶端上)TcpClient - 我可以用它替換嗎?
所以,當客戶A做了 - 它發送消息給客戶B,C和d,然後等待迴應。這對於許多客戶來說是緩慢的(現在像20)特別是當客戶B去世時 - 客戶A等待直到超時。
有沒有更好的方法可能同時向大家播放包?我知道每個人的主機名等。
我只需要發送消息,並知道他們是否/沒有成功接收它。
我的選擇是什麼?
我們有客戶端 - 服務器應用程序,所有的客戶端也可以通過TCP互相交談(TcpClient的+的TcpListener每個客戶端上)TcpClient - 我可以用它替換嗎?
所以,當客戶A做了 - 它發送消息給客戶B,C和d,然後等待迴應。這對於許多客戶來說是緩慢的(現在像20)特別是當客戶B去世時 - 客戶A等待直到超時。
有沒有更好的方法可能同時向大家播放包?我知道每個人的主機名等。
我只需要發送消息,並知道他們是否/沒有成功接收它。
我的選擇是什麼?
我建議徹底關閉策略並使用一些消息總線以可靠和性能優化的方式完成此操作。我很高興ActiveMQ,即使它在Java works in C# very easily實施。如果你想要一些純.NET,請看NServiceBus或Rhino Service bus。我知道你可能覺得在客戶之間調度消息的任務很簡單,你可以自己做,如果你想在生產中做可靠的話,如果你利用別人的努力並放鬆自己,那麼它會更好。嘗試解決應用程序在客戶端運行時的通信錯誤將會非常令人沮喪。當然,如果你正在編寫競爭對手的消息總線,請忽略這一點:) 所有這些解決方案都允許你通過閱讀文檔來完成工作。在爲了獲得必要的置信度而更換生產代碼之前,先做一些「體外」測試應用程序,然後替換硬的TcpClient。我確信你可以找到一個截斷點來隔離消息數據報的位置。
如果所有客戶端都運行Windows,則可以使用MSMQ,它是OS的(可選)部分。 – 2011-06-16 16:12:12
@Colin Desmond是的,這是真的,但MSMQ隊列只是fifo,你需要一些努力來創建一個調度策略(廣播) – 2011-06-16 16:15:50
我明白你的意思。此時應用程序僅處於支持模式,因此更改應該最小化。我絕對不想再添加服務器基礎架構。 – katit 2011-06-16 16:21:42