![]() |
1
499
比我最初想象的简单……基本上,您有一个不做任何事情的页面,直到您想要发送的数据可用为止(例如,一条新消息到达)。 下面是一个非常基本的例子,它在2-10秒后发送一个简单的字符串。返回错误404的几率为1/3(在接下来的javascript示例中显示错误处理)
注意:对于一个真正的站点,在像Apache这样的常规Web服务器上运行它将很快捆绑所有“工作线程”,使其无法响应其他请求。有很多方法可以解决这个问题,但建议用类似于Python的方法编写“长轮询服务器” twisted ,每个请求不依赖一个线程。 cometD 是一种流行的语言(有多种语言版本),并且 Tornado 是为此类任务专门设计的新框架(它是为FriendFeed的长轮询代码构建的)。但作为一个简单的例子,Apache已经足够了!这个脚本可以很容易地用任何语言编写(我选择了Apache/PHP,因为它们很常见,而且我碰巧在本地运行它们)。
然后,在javascript中,您请求上述文件(
下面是这样一个页面的例子。加载页面时,它将发送
1秒
如果页面出错,它会将错误附加到
这种方法的好处在于它具有很强的弹性。如果客户机Internet连接中断,它将超时,然后尝试重新连接-这是轮询工作时间的固有特征,不需要复杂的错误处理
不管怎样,
|
![]() |
2
41
我有一个非常简单的聊天示例作为 slosh . 编辑 :(因为每个人都在这里粘贴他们的代码) 这是使用长轮询和 晃动 . 这是一个 演示 关于如何进行调用,请忽略XSS问题。任何人都不应该在没有先消毒的情况下部署它。 注意客户 总是 连接到服务器,一旦有人发送消息,每个人都应该立即大致看到它。
|
![]() |
3
31
|
![]() |
4
24
我认为客户机看起来像一个普通的异步Ajax请求,但是您希望它需要“很长时间”才能恢复。 服务器看起来是这样的。
因此,Ajax请求将发送到服务器,可能包括它上次更新的时间戳,以便
|
![]() |
5
17
Here 是我在C中用于长轮询的类吗?基本上有6个班(见下文)。
|
![]() |
6
16
这是一个关于如何使用php&jquery进行长时间轮询的5分钟的精彩截屏: http://screenr.com/SNH 代码与 DBR 上面的例子。 |
![]() |
7
12
这里是
a simple long-polling example in PHP by Erik Dubbelboer
使用
下面是一个演示: |
![]() |
9
9
下面是我为Inform8Web开发的一个长轮询解决方案。基本上,重写类并实现loadData方法。当loadData返回值或操作超时时,它将打印结果并返回。 如果脚本的处理时间可能超过30秒,则可能需要将set_time_limit()调用更改为更长的时间。 Apache 2.0许可证。GitHub上的最新版本 https://github.com/ryanhend/Inform8/blob/master/Inform8-web/src/config/lib/Inform8/longpoll/LongPoller.php 赖安
|
![]() |
10
8
谢谢你的密码, DBR . 只是一个小的打字错误 龙眼 绕线
我想应该是
为它工作。 对于那些感兴趣的人,我尝试了一个相当于姜戈的。比如说,开始一个新的Django项目 对于长轮询:
调用应用程序 MSGSRV 对于消息服务器:
将下列行添加到 设置Py 有一个 模板 目录:
在中定义URL模式 URLS.Py 像这样的:
MSGSRV/ VIEW 应该看起来像:
最后,模板/ 龙眼 应与上述相同,并纠正打字错误。希望这有帮助。 |
![]() |
11
8
看一看 this blog post 在python/django中有一个简单的聊天应用程序的代码/ gevent . |
![]() |
12
7
这是一个非常糟糕的PHP选择场景。如前所述,您可以非常快地将所有Apache工作人员绑定在一起,执行类似的操作。PHP是为开始、执行、停止而构建的。它不是为开始而构建的,等等…执行,停止。你会很快陷入服务器的困境,发现你有难以置信的伸缩问题。 也就是说,您仍然可以使用PHP来完成这项工作,并且不要使用nginx httppushstreammodule来终止服务器: http://wiki.nginx.org/HttpPushStreamModule 您在Apache(或其他)前面设置nginx,它将负责保持并发连接的开放性。您只需将数据发送到一个内部地址,就可以使用后台作业进行响应,或者只需将消息发送给等待新请求进入的人。这可以防止在长时间轮询期间PHP进程处于打开状态。 这不是PHP独有的,可以在任何后端语言中使用nginx。并发开放连接的负载等于node.js,所以最大的好处是它可以让您不需要这样的节点。 你会看到很多人提到其他语言库是为了完成长时间的投票,这是有充分理由的。PHP并不是为这种行为自然构建的。 |
![]() |
13
4
为什么不考虑Web套接字而不是长轮询呢?它们效率高且易于安装。但是,它们仅在现代浏览器中受支持。这里是一个 quick reference . |
![]() |
14
3
WS-I组发布了一个名为 "Reliable Secure Profile" 有一个玻璃鱼和 .NET implementation 显然 inter-operate 好。 幸运的是 Javascript 在那里也可以实现。 还有一个Silverlight实现使用 HTTP Duplex. 你可以 connect javascript to the Silverlight 对象以在发生推送时获取回调。 也有 commercial paid versions 也。 |
![]() |
15
2
对于ASP.NET MVC实现,请查看signal which is available on NuGet …请注意,nuget通常从 Git source 这是非常频繁的承诺。 |
![]() |
16
2
你可以试试iComet( https://github.com/ideawu/icomet )一个用LiBevor构建的C1000 K C++CeMET服务器。icomet还提供了一个javascript库,它使用起来非常简单
icomet支持多种浏览器和操作系统,包括Safari(iOS、Mac)、IES(Windows)、Firefox、Chrome等。 |
![]() |
17
-1
最简单的节点
在Express for ExMaple中,您将获得
如果你不知道我所说的范围界定是什么意思,这应该能让你知道
正如您所看到的,您可以真正地响应所有连接,一个,做任何您想要的。有
|
![]() |
Julian Koster · $\u发布内容的持续时间(生存期) 6 年前 |
![]() |
chris hyun ho kim · 用于“拆分”记录的HTTP谓词 6 年前 |
![]() |
Ian.V · Golang CSRF在结构中保存模板字段 6 年前 |