【问题标题】:stream socket and server sent event流套接字和服务器发送事件
【发布时间】:2014-02-24 07:21:15
【问题描述】:

我再次使用stream_socket在一些实时系统上工作,并在客户端服务器发送事件......因为我不是专业人士,也不够聪明,无法自己解决问题。

这就是我使用 udp 从一台服务器获取更新的事情......并且希望通过服务器发送的事件或其他不使用 api 或库的方式向用户生动地显示数据。 .

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部分

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

【问题讨论】:

  • EventSource 基于 HTTP,而不是 UPD。您只需要稍微修改 HTTP 响应即可使用 EventSource。
  • 感谢评论..我目前正在尝试我能想到的,仍然让我受到限制。

标签: javascript php


【解决方案1】:

了解到 php 在完全执行之前不会回显。我将尝试更多选项来保持连接打开而不是再次请求文件。暂时这工作得很好,仍然有很少的数据包丢失但工作正常。

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>";
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 2016-03-03
    • 1970-01-01
    • 2015-10-26
    • 2011-08-17
    相关资源
    最近更新 更多