gpt4 book ai didi

java - 服务器如何向客户端推送数据?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:15:30 25 4
gpt4 key购买 nike

学习java服务器技术,试图搞清楚一些事情。允许 java 应用程序相互通信的技术很少。

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

2) 通过 http 使用 URLConnection 的简单 POST/GET。

3) 套接字

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

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

所有这些技术都假设有一个服务器应用程序和一个客户端应用程序。客户端应用程序知道服务器地址并且应该是调用的发起者。据我了解,服务器无法将数据推送给客户端,他只能将数据作为响应发送回客户端。并且有可能,只要他们改变他们的角色,在这种情况下服务器应该知道客户端 IP。

所以我想知道网络游戏是如何运作的?是否可以一直打开服务器和客户端之间的连接并交换数据,而无需每隔 1-2 秒从客户端拉取请求,并且服务器不知道客户端 IP。我不是在谈论 cometd 和其他黑客。

谢谢

最佳答案

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

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

关于java - 服务器如何向客户端推送数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3162006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com