代码之家  ›  专栏  ›  技术社区  ›  Achilles

将消息从服务器端应用程序推送到客户端?

  •  6
  • Achilles  · 技术社区  · 14 年前

    我有一个基于javascript的客户端,它当前正在轮询.netweb服务以获取新内容。虽然轮询有效…但我对这种方法不满意,因为我在使用系统资源,在没有任何更改可接收的情况下会产生开销。

    我的问题是如何通知我的客户有新的内容要显示?我对实现此解决方案所需的任何其他技术持开放态度。

    5 回复  |  直到 14 年前
        1
  •  7
  •   Mikael Svenson    14 年前

    首先,投票是一种方式。你可以用闪光灯、银光灯或彗星- http://en.wikipedia.org/wiki/Comet_(programming) 网页本身无法保持套接字打开,因此无法直接通知web客户端。

    [编辑] 但是想想看,一次有多少个客户机可以与一个服务器保持tcp连接?对于一个更大的系统,你会很快用完可用的插槽,因为有65k端口可用。

    将轮询与前端的缓存服务器结合使用是一个很好的解决方案。您可以在服务器上使用逻辑来更新每个客户端的缓存,从而减少每次轮询的负载。您可以为在X分钟内登录/轮询的用户更新缓存,以进一步减少缓存更新。对我来说,实现pull比pull更简单,技术上更明智。

        2
  •  2
  •   Claudio Redi    14 年前

    你应该研究一下 COMET

        3
  •  2
  •   Jerod Venema    14 年前

    退房 WebSync ,用于.NET/IIS的comet解决方案。它会完全符合你的要求。没有额外的投票浪费资源,只在需要时推,实时更新…整个9码。

        4
  •  1
  •   Marcel Korpel    14 年前

    http://www.ape-project.org/ 我觉得是你找的好地方。它基于ajax推送或一些人称之为反向ajax。还有其他项目,其基础是: http://en.wikipedia.org/wiki/Comet_(programming)

    我提到了APE项目,因为您可以使用JavaScript,或者如果您想在服务器端使用C++、PHP、Python等。

        5
  •  1
  •   Remus Rusanu    14 年前

    您已经听说过HTTP轮询(COMET)。这就留下了一个悬而未决的问题,即 本身(IIS+ASP)检测数据库中的更改而不轮询数据库。使用SQL Server,您可以使用以下技术 Query Notifications ,它允许ASP.Net进程在数据库中缓存的记录发生更改时收到通知。您也可以查看 LinqToCache 允许查询通知与LINQ查询混合的项目。