2011-10-13 20 views
0

我開始一個寵物項目,看看我是否可以創建一個好友列表(如AIM/MSN/Skype/Steam),並且只專注於獲取在線/離線通知上班。我的經驗是C#,.NET,以及構建Webforms和Winforms,所以我也將此作爲學習WPF的機會,我知道這是一個挑戰,但是從最終讀到的內容來看,WPF將使這種項目變得更容易。建立一個WPF桌面應用程序的登錄服務器

我很感興趣的任何輸入或建議,可能會幫助我,或者如果我忽視任何東西,特別是當涉及到縮放。

現在我的設計是讓客戶端告訴登錄服務器,用戶名已經登錄,以及IP和開放端口。 (根據我的理解,最好的方法是在登錄服務器上使用WCF Web服務?)

登錄服務器然後將用戶名存儲在散列表中(這是否會縮放?)並查詢所有人的朋友列表數據庫誰是你的朋友,然後檢查任何這些在線的朋友相同的哈希表。當登錄服務器在散列表中發生命中時,它會將您的信息(名稱,IP,端口)發送給您的朋友的客戶端(再次是WCF?),然後您的朋友的客戶端將您的客戶端信息發送給朋友的客戶端在線(WCF再次?

這可能很簡單,但這項工作?

在此先感謝。

回答

0

我以前用.Net Remoting做過這個。

  • 客戶端和服務器共享一個通用的接口DLL。
  • 客戶端在服務器上創建一個服務器對象(單例),並獲得一個IServer 接口。
  • 客戶端將一個IClient對象交給IServer。
  • 服務器保存當前連接的IClient列表(建議使用週期性ping)。
  • 服務器可以操縱它想要的任何IClient(例如,推送通知)
  • 服務器可以作爲一個總機接線員和手IClient接口互相作用(例如,用於聊天會話)

我這樣做使用雙向通道(GenuineChannels)進行性能(二進制序列化),推送通知以及穿越防火牆(如果客戶端位於防火牆之後,服務器在連接斷開後無法回撥給它們)。


======== 選項 ===========

.NET遠程 - 真的從那時起沒有改變 - 所以這是仍然可行。

WCF回調 - 當我嘗試它們時沒有通過防火牆工作,因爲它們等待服務器打開連接並使用兩個單獨的連接。
http://msdn.microsoft.com/en-us/magazine/cc163537.aspx

Azure的服務總線 - 該解決方案,我認爲微軟希望你考慮這些天 http://www.microsoft.com/windowsazure/features/servicebus/

相關問題