2014-02-24 35 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>"; 
}; 
相关问题