nginx下要使用Server-Sent Events要如何配置?

來源:互聯網
上載者:User
使用php+js實現伺服器推,在wamp環境中可以生效,但轉移到Linux下的nginx上,就不能用了,是環境配置問題?要如何配置?
以下是相關代碼
伺服器端php代碼:

date_default_timezone_set("America/New_York");header("Content-Type:text/event-stream");$userid = $_SESSION['userid'];//session_write_close();$db = get_db();while(true) {  $notices = $db->lRange("User:{$userid}:Notice", 0, -1);  $notice_num = 0;  foreach ($notices as $value) {    $readed = $db->hGet("Notice:{$value}:Info", 'readed');    if ($readed == false) {      $notice_num++;    }  }  echo "event: ping\n";    $curDate = $notice_num;    echo 'data: {"time": "' . $curDate . '"}';    echo "\n\n";    ob_flush();    flush();    sleep(30);}

前端js:

var evtSource = new EventSource(serverName + 'index.php/Home/NoticePush/index');    evtSource.addEventListener("ping", function(e) {         var obj = JSON.parse(e.data);         $('div#header div#user_notice a').text(obj.time);   }, false);

回複內容:

使用php+js實現伺服器推,在wamp環境中可以生效,但轉移到Linux下的nginx上,就不能用了,是環境配置問題?要如何配置?
以下是相關代碼
伺服器端php代碼:

date_default_timezone_set("America/New_York");header("Content-Type:text/event-stream");$userid = $_SESSION['userid'];//session_write_close();$db = get_db();while(true) {  $notices = $db->lRange("User:{$userid}:Notice", 0, -1);  $notice_num = 0;  foreach ($notices as $value) {    $readed = $db->hGet("Notice:{$value}:Info", 'readed');    if ($readed == false) {      $notice_num++;    }  }  echo "event: ping\n";    $curDate = $notice_num;    echo 'data: {"time": "' . $curDate . '"}';    echo "\n\n";    ob_flush();    flush();    sleep(30);}

前端js:

var evtSource = new EventSource(serverName + 'index.php/Home/NoticePush/index');    evtSource.addEventListener("ping", function(e) {         var obj = JSON.parse(e.data);         $('div#header div#user_notice a').text(obj.time);   }, false);

因為nginx緩衝區問題,預設nginx是有緩衝區,php的重新整理輸出對nginx無效的。
需要輸出前面再加個

header('X-Accel-Buffering: no');
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.