使用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');