相关疑难解决方法(0)

facebook,gmail如何发送实时通知?

我已经阅读了一些关于这个主题的帖子,答案是彗星,反向ajax,http流,服务器推送等.

Gmail上的传入邮件通知如何运作?

如果没有客户端交互,GMail Chat如何能够发出AJAX请求?

我想知道是否有任何代码引用,我可以遵循写一个非常简单的例子.许多帖子或网站只是谈论这项技术.很难找到完整的示例代码.此外,似乎可以使用许多方法来实现彗星,例如Hidden IFrame,XMLHttpRequest.在我看来,使用XMLHttpRequest是一个更好的选择.您如何看待不同方法的优缺点?Gmail使用哪一个?

我知道它需要在服务器端和客户端都这样做.有没有PHP和Javascript示例代码?

comet

265
推荐指数
5
解决办法
10万
查看次数

服务器发送事件 PHP 阻塞流

我不知道它是否有问题,但是,我使用 Server Sent 事件而不是 ajax 来做从 php 到 javascript 的提要。除了在服务器端睡眠,保持事件源阻止网页流之外,一切正常。我做了一个非常简单的代码来测试,我得到了相同的结果。

我会把代码放在上面。

服务器发送事件挂起页面流?它不像 ajax 那样做异步请求?

主要问题是:服务器发送的事件挂起代码流,我的意思是,页面等待 EventSource 保持代码执行,每次 eventSouce 打开连接或接收消息。当我在服务器端代码上休眠时,我可以清楚地看到这一点,我的页面在休眠时间停止,运行 3 秒,然后再次挂起。当我执行 ajax 调用时,调用是异步的,因此即使我在服务器端休眠,代码也会在后台使用 ajax 继续运行。我希望你现在能理解=p

测试文件

                    @set_time_limit(0);
                    //send the proper header
                    header('Content-Type: text/event-stream');
                    header('Cache-Control: no-cache');
                    if(function_exists('apache_setenv')){
                        @apache_setenv('no-gzip',1);
                    }
                    @ini_set('zlib.output_compression',0);
                    @ini_set('implicit_flush',1);
                    for($i = 0; $i < ob_get_level(); $i++){
                        ob_end_flush();
                    }
                    ob_implicit_flush(1);

                $startedAt = time();

                do {

              $time = time();
              echo "id: $startedAt " . PHP_EOL;
              echo "data: {\n";
              echo "data: \"msg\": \"$time\", \n";
              echo "data: \"id\": $startedAt\n";
              echo "data: }\n";
              echo …
Run Code Online (Sandbox Code Playgroud)

php multithreading server-sent-events

6
推荐指数
1
解决办法
1055
查看次数

当刷新页面或按下 F5 时,服务器发送事件,而循环需要太多时间来加载页面

我正在使用服务器发送的事件来查询数据库中的新记录并向用户显示事件

这是我的代码

javascript

window.onload = function setDataSource() {

if (!!window.EventSource) {
var source = new EventSource("polling.php");

source.addEventListener("message", function(e) {
  console.log(e.data);
}, false);

source.addEventListener("open", function(e) {
  console.log("OPENED");
}, false);

source.addEventListener("error", function(e) {
  console.log(e);
  if (e.readyState == EventSource.CLOSED) {
    console.log("CLOSED");
  }
}, false); } else {}}
Run Code Online (Sandbox Code Playgroud)

PHP

  <?php
  header("Content-Type: text/event-stream\n\n");
  include_once dirname(__FILE__) . '/db.php';
  session_start();

   while (1) {
   $response = getnewmessages();
   echo 'data: Message '. json_encode1($response)."\n\n";
   ob_flush();
   flush();
   sleep(5);

   }

 function getnewmessages ()
{
// query database and get new records.
 } …
Run Code Online (Sandbox Code Playgroud)

php server-sent-events

3
推荐指数
1
解决办法
1382
查看次数

标签 统计

php ×2

server-sent-events ×2

comet ×1

multithreading ×1