0

我试图让客户端实例能够检测其他客户端实例何时发布某些内容,然后检索该帖子。(所以我想它就像一个聊天系统,但对于我的实现来说,它不是为了那个)

我正在尝试使用服务器端事件。

我注意到,对于一个基本的 SSE 结构,客户端的 Javascript 监听传入的服务器 PHP 输出,我每隔几秒左右就会收到一个连续的消息流。

如何将用户实例 POST 数据(通过 HTML 表单)发送到服务器 PHP 脚本,该脚本接收数据并将其转换为 SSE 样式 JSON,输出(回显)它,然后让所有用户实例检测并检索它一个帖子,只有一次?

例如,这是我的基本 SSE 结构:

接收 POST 数据并输出 JSON 数据的 PHP 脚本 (stream.php)

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

    function sendMsg($name, $msg) {
      echo "data: {\n";
      echo "data: \"name\": \"$name\", \n";
      echo "data: \"msg\": \"$msg\", \n";
      echo "data: \"id\": 1\n";
      echo "data: }\n";
      echo PHP_EOL;
      ob_flush();
      flush();
    }

    sendMsg($_POST['name'], $_POST['message']);

用于侦听和接收服务器发送数据的客户端 Javascript(在 index.php 中)

var source = new EventSource('stream.php');
        }               

        source.addEventListener('message', function(e) {
            var data = JSON.parse(e.data);
            $("#stream").prepend(
                "<div class='newitem'>" +
                data.name + ": " + data.msg + 
                "</div>"
            )
        }, false);

在 下<div id="stream">,我会得到一个连续的流undefined,每 3 秒一个,我应该这样做。像这样:

undefined undefined
undefined undefined
undefined undefined
....

现在,我怎样才能有一个像下面这样的表单,并让上面的流检测并显示提交的数据?

向服务器发送数据的 HTML 表单(在 index.php 中)

<form action="stream.php" method="POST">
    <input name="name" id="name" type="text"/>

    <textarea id="message" name="message"></textarea>
    <br>
    <input name="submit" id="submit" type="submit" value="Send"/>    
</form>

所以希望,我下面的流<div id="stream">看起来像这样?

undefined undefined
Bob: Hello
undefined undefined
....

目前,尽管 stream.php 实际上正在检索表单数据,但由于某种原因它不会显示。它仍将继续读取未定义(或者,更确切地说,不显示任何内容)。

如果我能做到这一点,我打算只过滤掉undefined undefined消息,这样只有定义的消息才会显示在客户端流中。

4

1 回答 1

0

您可能想要使用Web Sockets。如果您使用的是node.js , Socket.io非常棒,但也有php 库可以帮助您,

于 2013-09-06T04:34:33.733 回答