2010-07-01 217 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

相关问题