2012-12-19 164 views
3

我正在用Flex開發遊戲。
這裏有AIR和Web版本的遊戲。 AIR應用程序將使用端口上的UDP套接字連接到服務器。 Web版本的目的是允許用戶在工作時播放,或者在阻止某些端口的防火牆/代理之後的計算機上播放。因此,Web將使用端口80上的http連接來連接到服務器。偵聽套接字udp和http連接的服務器代碼

回答http連接的服務器代碼將是使用BlazeDS的java servlet。 但是,如果你們中的任何一個人發現它更容易解釋一個C#服務器代碼(webservices或其他),那就沒問題。 應答UDP請求的服務器代碼將是一個監聽套接字連接的簡單類。

我的問題是我不知道如何把UDP和http代碼放在一起。如果有5個AIR客戶端和5個Web客戶端,則他們都需要在服務器中使用一些常見的收集變量,以便我可以使用最新信息更新所有客戶端。 誰將實例化偵聽套接字的類?什麼時候?

所以總結一下:
1.我需要一個專用服務器來實現我想要的嗎?
2.誰將實例化udp處理類以及何時?
3.甚至可以將UDP連接的udp處理類和servlet保留在一起?如果沒有http,我甚至不需要tomcat。但http和udp代碼需要保持在一起,以便我可以更新播放器集合。是否有可能實例化UDP處理類並告訴它在servlet部署在服務器上時偵聽套接字......或類似的東西?

任何建議都更受歡迎。
由於提前,
米哈

回答

1

HTTP和UDP代碼要待在一起

不,他們沒有。它們是您遊戲數據的傳輸機制,因此它們應該是透明的。你的UDP和HTTP服務器應該連接到你的遊戲後端,以什麼方式取決於你。它可以在內存中,通過直接從後端代碼使用HTTP和UDP(套接字)模塊,或者它可以使用某種服務(所以你可以讓其他通道與同一個後端對話)。

此遊戲後端不直接連接到用戶,但只與UDP和HTTP模塊進行通信。

然後,從此後端處理您從HTTP和UDP收到的消息,並通過同一通道發送響應。

實施例:

  1. AIR-客戶機1發送一個有效的登錄消息給UDP服務器。
  2. UDP服務器將登錄消息轉發到遊戲後端。
  3. 遊戲後端將成功的結果消息返回給UDP服務器
  4. UDP服務器將結果消息轉發給AIR-client 1。

例2:

  1. 現在HTTP客戶端1,這恰好是已經登錄,請所有用戶當前登錄它這樣做是通過HTTP,HTTP服務器。
  2. HTTP服務器將此請求轉發給遊戲後端。
  3. 遊戲後端將信息返回給HTTP服務器
  4. HTTP服務器向客戶端返回響應。