学习java服务器技术,尝试澄清一些事情。 很少有技术允许Java应用程序相互通信。
1)通过http
的Web服务(REST / SOAP)2)通过http。
使用URLConnection进行简单的POST / GET3)套接字
4)RMI =套接字+对象序列化+一些实用程序
5)不同的媒体服务器,如red5 = rtmp或rtmpt
所有这些技术都假设有一个服务器应用程序和客户端应用程序。客户端应用程序知道服务器地址,应该是调用的发起者据我所知,现在服务器将数据推送到客户端,他只能将数据作为响应发送回客户端。并且有可能,如果只有他们改变他们的角色,在这种情况下服务器应该知道客户端IP。
所以我想知道网络游戏是如何运作的?是否有可能始终在服务器和客户端之间打开连接和交换数据,而不是每1-2秒从客户端请求一次,服务器就不知道客户端IP。我不是在谈论彗星和其他黑客。
谢谢
答案 0 :(得分:6)
大多数双向持久性应用程序打开网络端口并保持打开状态。服务器侦听一个众所周知的端口,当客户端连接到该端口时,它会获得与服务器的持久TCP连接。像这样的连接基本上是双向“管道”,数据可以同时在两个方向上串行流动。只要该管道处于打开状态,服务器就会侦听来自客户端的消息,并且客户端会侦听来自服务器的消息。
用于TCP管道的通用I / O API允许连接的任一端“被唤醒”:异步I / O请求从OS或I / O库管理的线程执行已注册的回调函数或客户端/服务器在“阻塞”调用上占用自己的线程,该调用在数据可用时返回。此模型不需要轮询或重新连接尝试,客户端和服务器都“知道”数据何时可用并且可以立即对其进行操作。