2014-02-24 109 views
0

再次即時通訊工作在一些實時系統使用stream_socket和在客戶端服務器發送事件...因爲即時通訊既不智能足以解決案件我自己。流套接字和服務器發送事件

這裏的東西即時獲取更新從一個服務器到此使用udp..and想顯示數據給用戶活潑的服務器發送事件或其他不使用apis或庫。 。

PHP代碼

<?php 
$socket = stream_socket_server("udp://127.0.0.1:7755", $errno, $errstr,STREAM_SERVER_BIND); 
if (!$socket) { 
die ("$errstr ($errno)<br />\n"); 
} 
while (true) { 
header('Content-Type: text/event-stream'); 
header('Cache-Control: no-cache'); 

$got= stream_socket_recvfrom($socket, 1500);// just say im getting time update every 1 second from the sender 
echo $got; 
flush(); 
} 


?> 

JS據悉,PHP將不回直到其完全執行部分

var source = new EventSource("receive.php"); 
source.onmessage = function(event) { 
document.getElementById("result").innerHTML + =event.data + "<br>"; 
}; 
+0

EventSource的是基於HTTP,不UPD。你只需要稍微修改一下HTTP響應就可以使用EventSource。 – dandavis

+0

感謝您的評論..當前嘗試我能想到的,仍然讓我受到限制。 – user3154926

回答

0

我會嘗試更多的選項來保持連接打開,而不是再次請求文件。暫時這工作完美仍然有少數包丟失,但工程。

PHP

<?php 
$sock=stream_socket_server("udp://127.0.0.1:7755",$errno,$errstr,STREAM_SERVER_BIND); 

if (!$sock) { 
die("$errstr ($errno)"); 
} 

header('Content-Type: text/event-stream'); 
header('Cache-Control: no-cache'); 

$d=stream_socket_recvfrom($sock, 1500); 

echo "data: {$d}\n\n"; 

flush(); 
?> 

JS

var source = new EventSource("receive.php"); 
source.onmessage = function(event) { 
document.getElementById("result").innerHTML + =event.data + "<br>"; 
}; 
相關問題