2010-07-01 166 views
6

學習java服務器技術,試圖澄清一些事情。 有幾種技術可以讓Java應用程序相互通信。服務器如何將數據推送到客戶端?

1)的Web服務(REST/SOAP)通過HTTP

2)簡單的POST/GET使用的URLConnection在HTTP上。

3)套接字

4)RMI =套接字+對象序列+一些公用事業

5)不同的媒體服務器等RED5 = RTMP或RTMPT

所有這些技術假設有一個服務器應用和客戶端應用。客戶端應用程序知道服務器地址並應該是調用的發起者據我所知現在有服務器將數據推送到客戶端,他只能將數據作爲響應發送回客戶端。如果只是他們改變他們的角色,這種情況下服務器應該知道客戶端IP是可能的。

所以我想知道網絡遊戲是如何工作的?是否有可能在服務器和客戶端之間全部打開連接和交換數據,而無需每隔1-2秒從客戶端請求服務器,並且服務器不知道客戶端IP。我不是在談論彗星和其他黑客。

謝謝

回答

6

大多數雙向永久應用程序打開網絡端口並保持打開狀態。服務器在一個衆所周知的端口上進行偵聽,並且當客戶端連接到該端口時,它將獲得到服務器的持久TCP連接。像這樣的連接基本上是雙向的「管道」,數據可以同時在兩個方向上串行流動。只要該管道是打開的,服務器就會偵聽來自客戶端的消息,客戶端將偵聽來自服務器的消息。

用於TCP管道的通用I/O API允許連接的任一端被「喚醒」:異步I/O請求從OS或I/O庫管理的線程執行已註冊的回調函數或者客戶端/服務器在「阻塞」呼叫上綁定自己的線程,當數據可用時返回。此模型不需要輪詢或重新連接嘗試,客戶端和服務器都「知道」數據何時可用並可立即採取行動。

+2

另外實時網絡遊戲通常實際上「欺騙」了一下。每個客戶端實時更新本地世界,並在從服務器進行新更新到達時重新同步共享仿真。 當你射擊你的敵人時,他可能會躲開你的射擊只能造成一點傷害,或者可能不會。當然這是服務器將根據來自該客戶端的躲閃命令是否在拍攝之前或之後到達而公平決定......但是攻擊玩家可能不會注意到所示的三維動畫與能量數量之間的最終不一致減去條。 – 6502 2010-07-01 22:19:05

相關問題