我正在寻找一种将信息从服务器发送到客户端的方法,例如歌曲或图像。
说明 : 我想将数据从我的服务器发送到下载 HTML5 应用程序的客户端。
但我不知道怎么做。我知道我可以从客户端向服务器发送 php 请求并在之后回答,但是我怎么能在没有客户端要求的情况下从服务器发送一些东西。
谢谢。
您可能希望尝试服务器发送的事件或 WebSockets:
-
http://www.html5rocks.com/en/tutorials/eventsource/basics/
-
http://www.html5rocks.com/en/tutorials/websockets/basics/
这些技术允许客户端 Web 应用程序随时保持对来自服务器的通信保持开放状态。服务器发送的事件是专门针对服务器到客户端的,而 WebSocket 可用于双向通信。
加上笑话的答案...
您希望将数据从服务器异步发送到客户端。这意味着客户端不知道何时需要数据。实际上,在当今的Web上,您有以下选择:
- 某种形式的轮询、
- 长轮询、彗星等。
- 网络套接字
第一种选择更好理解,因为这些技术已经存在了很长时间。
WebSocket 较新,但它是更好的解决方案,因为它缓解了通过轮询、长轮询等方式困扰基于 HTTP 的技术的问题。对于小型应用程序或不经常轮询的应用程序,您可以侥幸使用轮询。但是,当您想要扩展时,这些解决方案会遇到问题。
我不会打扰SSE(服务器发送事件),因为它几乎是WebSocket的一个子集。任何考虑SSE的人通常最终只会使用WebSocket,因为它的工作量大致相同,并且为您提供了更多(例如双向交互)。
但是,WebSocket 不会取代 HTTP;应用程序可以同时使用两者。为正确的工作使用正确的工具。
在您的情况下,请使用具有 WebSocket 连接的客户端。然后,您的后端应用程序可以随时(异步)通知客户端有事情要做(例如,有新歌曲或图像可用,如您在原始帖子中所说)。
我不会费心通过 WebSocket 连接发送歌曲或图像,尽管您可以。相反,客户端可以使用传统的HTTP技术获取歌曲或图像,这些技术很好理解并且擅长处理静态内容。例如,如果多人正在下载相同的(歌曲或图像)文件,则可以利用缓存。
因此,将要通过WebSocket下载的歌曲/图像的ID或URL发送到客户端。然后通过HTTP获取歌曲/图像。
这是同时使用HTTP和WebSocket的优势的一个例子。WebSocket 用于高效的异步交互,几乎没有带宽消耗,HTTP用于高效获取静态资源。