2010-11-12 160 views
0

我一直在C#.NET的紙牌遊戲引擎上工作一段時間。目前已接近完成,但目前爲止,該界面只是一個簡單的控制檯,其中ReadLineWriteLine多人紙牌遊戲的設計注意事項

對於數據,我有一個GameState對象,它在給定的時間點存儲幾乎所有相關信息。遊戲的其餘部分是嚴重事件驅動的。

我正在尋找分支成一個完整的在線應用程序。我一直在閱讀很多關於WCF和它在Web服務中的回調支持,這對我來說似乎是一個不錯的選擇。但是,如果適合的話,我願意接受其他想法。

我期望的唯一問題是我嘗試這樣做時的線程噩夢。我有一種方法,我想可能會盡可能減少線程的困擾:

1)讓WCF服務只通過回調接口向用戶請求數據(例如,提示某些操作)並提供幾個通知客戶有關遊戲狀態的更新。強調:客戶不能'查詢'遊戲狀態。他們向服務器發送數據的唯一方法是服務器通過回調來請求數據。

我唯一擔心的是客戶端可能需要從服務器請求某些我不期待的數據。如果出現這種情況,我可以提供一些方法讓客戶讀取遊戲狀態,但是現在我必須開始考慮GameState對象上的讀卡器鎖。

我想如果必須的話,我會挖掘並嘗試使這件事情線程安全,但我想通過你們運行這個來看看你是否有任何建議。

回答

1

如果你想這是一個Web應用程序(HTML),那麼我會說你最好的選擇是使用網絡套接字(在Chrome原生支持,其他瀏覽器的Flash插件)和WebSocket的服務器一樣nugget融入你的代碼。這實現了從服務器到客戶端的真正推送通信。

如果你正在創建一個silverlight前端,你有很多選擇,但從我收集的唯一真正的選擇,如果你想一次擴展500個在線客戶端是使用自定義服務器,因爲IIS無法處理許多客戶在同一時間。我和製作Agricola的silverlight版本的人聊天,他使用了一個與iis很好地集成的定製服務器,稱爲websync,這對於業餘愛好者來說非常昂貴,但看起來很棒。

如果你正在創建一個富客戶端,你可以自由地拋出任何東西,甚至使用本地WCF的二進制套接字通信。

+0

好的建議。我應該花時間考慮一些可能的更低層次的實施方法。我會猜測,沒有太多的遊戲使用網絡服務作爲網絡的手段,而是擁有更專有的設置。 – Ben 2010-11-12 17:39:57