服务器如何将数据推送到客户端?

use*_*512 6 java sockets

学习java服务器技术,试图澄清一些事情.很少有技术允许Java应用程序相互通信.

1)通过http的Web服务(REST/SOAP)

2)通过http使用URLConnection进行简单的POST/GET.

3)插座

4)RMI =套接字+对象序列化+一些实用程序

5)不同的媒体服务器,如red5 = rtmp或rtmpt

所有这些技术都假定存在服务器应用程序和客户端应用程序.客户端应用程序知道服务器地址,应该是调用的发起者 据我所知,现在服务器将数据推送到客户端,他只能将数据作为响应发送回客户端.并且有可能,如果只有他们改变他们的角色,在这种情况下服务器应该知道客户端IP.

所以我想知道网络游戏是如何运作的?是否有可能在服务器和客户端之间始终打开连接和交换数据,而不是每1-2秒从客户端请求一次,服务器就不知道客户端IP.我不是在谈论彗星和其他黑客.

谢谢

Dav*_*ter 6

大多数双向持久应用程序打开网络端口并保持打开状态.服务器侦听一个众所周知的端口,当客户端连接到该端口时,它会获得与服务器的持久TCP连接.像这样的连接基本上是双向"管道",数据可以同时在两个方向上串行流动.只要该管道处于打开状态,服务器就会侦听来自客户端的消息,并且客户端会侦听来自服务器的消息.

用于TCP管道的通用I/O API允许连接的任一端"被唤醒":异步I/O请求从OS或I/O库或客户端/管理的线程执行已注册的回调函数服务器在"阻塞"调用上绑定自己的线程,该调用在数据可用时返回.此模型不需要轮询或重新连接尝试,客户端和服务器都"知道"数据何时可用并且可以立即对其进行操作.

  • 实时网络游戏通常也会"欺骗"一些.每个客户端都在本地实时更新世界,并在服务器的新更新到达时重新同步共享模拟.当你向敌人射击时,他可能会躲闪你的射击只会受到很小的伤害或者可能没有.当然,根据该客户端的闪避命令是否在射击之前或之后到达,服务器将公平地决定...但攻击玩家可能不会注意到所显示的3D动画与能量数量之间的最终不一致减去酒吧. (2认同)