首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过HTTP更好的服务器到客户端通信机制

通过HTTP更好的服务器到客户端通信机制
EN

Software Engineering用户
提问于 2013-06-10 03:46:19
回答 1查看 4K关注 0票数 4

我有一个有几个客户端的服务器。我想在给定的时间将消息推送到特定的客户端。客户端不应轮询到服务器。解决这个问题的好模式和做法是什么?

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2013-06-10 04:39:04

您可以使用一种经常被称为长轮询或彗星的技术,它允许实现基于“推送”的事件/更新系统

原理

这一原则相当简单:

  1. 客户端向服务器发送请求并保持连接正常;
  2. 服务器在连接上保留一个句柄并等待;
  3. 当更新可用时,服务器将数据发回客户端;
  4. (取决于客户端技术)客户端可能需要发送新请求。

这样客户就不会定期投票了。但是,这意味着在任何给定的时间都可能保持大量连接的活动,因此请确保您了解这种方法对服务器的影响。

如何实现?

因此,不管您的平台是什么,底层的原则都是一样的:只要您能够发送HTTP请求并同步或异步地等待响应,就有一种实现长轮询的方法。

重型客户

由于大多数编程语言的目标是开发桌面解决方案(或“重型”客户端),您通常会求助于常用的网络工具:套接字。

轻量级/富客户端

如果我们讨论的是在基于浏览器的解决方案中构建丰富的web客户端,您可以选择:

  • 使用您通常的XMLHttpRequest对象(服务器只有在有东西要发回时才会回复,此时客户端要么重新启动另一个连接,要么在打开多个连接时使用备用连接,以确保随时打开多个通道),
  • 或者使用<script>标记查询URL,返回封装在调用客户端上下文中的函数中的有效负载(参见JSONP),
  • 或者使用WebSocket API与HTML5一起引入,
  • 或者使用外部工具(Java Applet、Flash等)达到同样的效果。

请注意,就像web技术中经常出现的情况一样,跨浏览器支持需要进行广泛的测试,如果您针对恶意的浏览器市场份额,您可能会被迫使用上述技术的组合。

票数 9
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/201003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档