标签: comet

可以进行客户端HTTP推送吗?

几乎与服务器端推送相反,也称为Comet.我想知道是否可以使用长期的HTTP连接将信息推送到服务器.

与简单的XHR不同,连接将保持活动状态,并且数据将按时间间隔流式传输到服务器,因为用户完成了操作等.

使用标准技术我不相​​信这是可能的,但我愿意接受有关可能的开发或巧妙实现这一目标的建议.目的是完成向服务器的低延迟数据推送,以实现快速有效的单向流.

我对使用flash/java桥接器的套接字实现不感兴趣,因为服务跨域策略或获得java签名的麻烦.欢迎使用无需额外依赖性的原始黑客.优选地,解决方案将使用javascript完成.

javascript ajax streaming comet http

5
推荐指数
1
解决办法
1271
查看次数

在没有获得超时的情况下,在响应浏览器之前我可以等待多长时间?

我正在创建一个与长轮询一起工作的聊天应用程序,以模拟从服务器到客户端的"推送".

基本上,浏览器要求更新,我回复是否有新的东西.否则,我保持连接打开而不响应,直到有东西要发回.

现在,如果30秒过去了,我还没有发送任何内容,那么我发送回复,基本上说"NoNews",客户端将再次进行轮询.

我想要做的是显然保持这种连接,而不是尽可能长时间地回复,在浏览器只是超时并放弃我...我没有找到关于每个浏览器的客户端超时的良好文档,它似乎对所有人来说都是一样的......

你们有没有做过长期投票申请?
任何想法最长的安全超时可能是什么?

谢谢!

comet http long-polling

5
推荐指数
1
解决办法
2455
查看次数

Comet(长轮询)和XmlHttpRequest状态

我正在玩一些原始的XmlHttpRequestObjects + Comet Long Polling.(通常,我会让GWT或其他框架为我处理此问题,但我想了解更多信息.)

我写了以下代码:

function longPoll() {
  var xhr = createXHR(); // Creates an XmlHttpRequestObject
  xhr.open('GET', 'LongPollServlet', true);
  xhr.onreadystatechange = function () {
    if (xhr.readyState == 4) {

        if (xhr.status == 200) {
            ...
        }

        if (xhr.status > 0) {
            longPoll();
        }
    }
  }
  xhr.send(null);
}

...
<body onload="javascript:longPoll()">...
Run Code Online (Sandbox Code Playgroud)

我将longPoll()一个if语句包装起来status > 0,因为我遇到了,当我离开页面时(通过浏览其他地方或重新加载它),最后一个不必要的彗星调用被发送.[在Firefox上,它甚至在进行页面重新加载时会导致严重的问题,由于某些原因我还没有完全理解.]

问题:这是status检查处理此问题的正确方法,还是有更好的解决方案?

javascript ajax comet xmlhttprequest long-polling

5
推荐指数
1
解决办法
3604
查看次数

使用Atmosphere或Cometd

这两个Java彗星库之间有什么区别?是否有理由选择一个而不是另一个?

java comet atmosphere

5
推荐指数
1
解决办法
1713
查看次数

长轮询超时问题

我正在做一个长轮询方法的聊天室.但似乎,当一个长的民意调查发生并且我刷新页面的铬或我尝试发送另一个异步请求一切都超时(即我不能再加载我的域,直到我关闭/重新打开浏览器).

我的客户端代码是:

 $(document).ready(function() {
    setTimeout(
      function () {
        longPollForMessages();
      },
      500
    );
  });

function longPollForMessages()
{
  $.ajax({
    url: url,
    dataType: 'json',
    success: function(data) {     
        $('#chat_messages').append('<div>'+data.messages+'</div>');

        longPollForMessages();
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

我的服务器端:

while(true) {
      $messages = $db->getMessages();

      if (!$messages || sizeof($messages)==0) {
        sleep(1);
      } else {
        echo '{"message":'.json_encode($messages).'}';
        die();
      }
    }
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?假设没有语法错误.

javascript php ajax comet

5
推荐指数
1
解决办法
1926
查看次数

什么是用Python编写的现代Comet服务器?

我在python中构建了我的应用程序(使用来自eventlent的greenthreads)我应该使用Orbited作为彗星服务器将请求从用户端javascript代码传递给我的应用程序.

可悲的是,我发现Orbited死了,网站停机了几个星期,它缺乏python 2.7支持.

你能推荐一些好的替代品吗?

python comet twisted eventlet

5
推荐指数
1
解决办法
1397
查看次数

这是Long Polling(Comet编程)的正确方法吗

首先,我要感谢所有伟大的人,因为他们对新程序员非常有帮助.

我有一个关于长轮询的问题.我研究了一些关于Comet Programming的长轮询技术的文章.这个方法对我来说似乎很难,因为它有时也需要在服务器端安装一些脚本.

现在我找到了一个关于长轮询的例子.它工作得很好,但我不确定它是否是正确的方法.示例脚本是关于类似聊天的应用程序.这个PHP脚本的工作原理如下:

  1. php脚本会持续检查data.txt文件,直到更改为止.
  2. 一旦data.txt被更改,新文本就会在网页上输出.

这是php脚本:

<?php
$filename  = dirname(__FILE__).'/data.txt';

// store new message in the file
$msg = isset($_GET['msg']) ? $_GET['msg'] : '';
if ($msg != '')
{
    file_put_contents($filename,$msg);
    die();
}

// infinite loop until the data file is not modified
$lastmodif    = isset($_GET['timestamp']) ? $_GET['timestamp'] : 0;
$currentmodif = filemtime($filename);
while ($currentmodif <= $lastmodif) // check if the data file has been modified
{
    usleep(500000); // sleep 500ms to unload the CPU
    clearstatcache();
    $currentmodif = …
Run Code Online (Sandbox Code Playgroud)

javascript php ajax comet long-polling

5
推荐指数
1
解决办法
1027
查看次数

SignalR - IE中的Forever Frame在空闲几分钟后停止工作

我在IE9中使用SignalR,不幸的是,它必须降级为使用永久帧连接.

我花了一些时间用IE中的开发者工具来看这个.我可以看到回调加载到动态插入的IFrame中,并且它们在SignalR插件中调用receive函数.然而,大约20/30之后,它只是停止响应 - 我不能再从服务器调用客户端脚本.

我猜测IFrame加载最终超时,但似乎没有为此引发任何事件,因此我无法强制重新连接.

有没有人设法在IE中获得强大的SignalR连接?

谢谢 :)

iframe internet-explorer comet signalr

5
推荐指数
2
解决办法
6683
查看次数

为什么在使用长轮询时设置客户端超时?

在我看到的几乎所有长轮询示例中,都有30秒的客户端超时。确切原因是什么?

javascript comet instant-messaging instant long-polling

5
推荐指数
1
解决办法
2399
查看次数

使用servlet或jsp获取数据库更新

我想要的是获取数据库更新.

即如果数据库发生任何更改或插入新记录,它应通知用户.

直到知道我实现的是使用jQuery,如下所示

 $(document).ready(function() {

     var updateInterval = setInterval(function() {

         $('#chat').load('Db.jsp?elect=<%=emesg%>');

     },1000);

 });   
Run Code Online (Sandbox Code Playgroud)

它对我来说很好,但我的老师告诉我,推荐使用彗星或长轮询技术不是一个好方法.

任何人都可以给我一些使用servlet/jsp中的comet或long轮询获取数据库更新的示例吗?我正在使用Tomcat作为服务器.

java jsp servlets comet long-polling

5
推荐指数
1
解决办法
1449
查看次数