2009-12-02 16 views
7

我建立一個小multipliplayer這將需要以下內容:Datasnap適合多達8個非通訊密集型雙向多人遊戲嗎?

  • 必須在Delphi編寫
  • 必須支持互聯網連接(不僅LAN)通過HTTP
  • 支持一些加密
  • 工作(可能是定製的)
  • 能夠發送命令到服務器
  • 能夠接收來自服務器的響應
  • 能夠連接多達8個玩家在一臺服務器
  • 能夠將複雜的對象(也許JSON序列)傳遞給服務器

你認爲新的Delphi 2010的DataSnap可以成功地在此使用場景還是應該與普通的舊TSocket一起去?

回答

10

的DataSnap可以做到這一點你上面列出的所有:

  1. 的DataSnap是在Delphi編寫。
  2. 它可以通過任何連接,本地,網絡或遠程HTTP連接。
  3. 它將通過HTTP工作,包括支持隧道連接的HTTP連接
  4. 您可以過濾數據流,只要你喜歡。該產品包括一個壓縮過濾器。 Daniele Teti寫了一些very nice encryption filters
  5. 你可以通過調用服務器方法
  6. 您可以接收通過服務器回調從服務器的響應
  7. 可以八人輕鬆地連接到服務器
  8. 你可以通過JSON對象發送到服務器的命令。這是在客戶端和服務器之間發送的默認類型。

所以要回答你的問題,是的,我認爲新的Delphi 2010 DataSnap可以用在你的場景中。

+0

請注意,上面的「非常好的過濾器」根本就不安全 - 因爲您需要一種安全的方式來交換會話密鑰。 – 2009-12-06 18:27:54

3

正如Nick所說,答案是肯定的。

鮑勃斯沃特寫了一份白皮書,並在更新的DataSnap in Delphi 2010上製作了一些視頻,可以幫助您入門。

1

如果您的多人遊戲不發送太多數據HTTP和Datasnap可能工作。如果您需要快速溝通,我會使用UDP和自定義二進制協議。除非必須繞過公司防火牆,該公司防火牆幾乎可以阻止任何協議,而是阻止HTTP - 而且公司通常不喜歡在工作時間內玩的人 - 防火牆會阻止傳入連接,而不是傳出。只需要服務器需要打開端口以允許客戶端連接。 而且我會避免使用JSON - 如果您不需要互操作性,則二進制序列化要快得多。

+0

您的意思是即使在企業網絡中使用端口80,防火牆也可以阻止通信(正在傳入)? – 2009-12-04 22:28:26

+0

正確的託管防火牆不允許傳入連接到端口80,但允許允許的Web服務器(通常在DMZ或類似服務器中)。客戶端可以將HTTP請求發送到端口80上的外部Web服務器,並接收答案,但nwtwork內的服務器無法接收請求,除非防火牆允許。 – 2009-12-06 18:25:06

+0

你是對的,AFAIK UDP不能在本地網絡外部路由(除非你做一些複雜的NAT),而HTTP/TCP是。從性能的角度來看,我絕不會使用DataSnap - 但在這裏,需求高達8個客戶端,所以在這種情況下,DataSnap將無縫處理它。 – 2014-06-28 14:02:52