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