PHP将数据流传输到AJAX调用

时间:2014-05-01 13:51:42

标签: php jquery python ajax

遵循以下信息:

我希望实现以下目标:

  • AJAX - > (POST)PHP(套接字) - > (插座)的Python

通过做:

$.ajax({
    type: "POST",
    url: "post.php",
    async: true,
    cache: false,
    data: { data : 'ping 127.0.0.1' },
    success: function(msg) {
        console.log(msg);
    }
});

使用PHP看起来像:

//header("Connection: close");
//header("Content-Type: application/octet-stream");
socket_write($socket, 'ping 127.0.0.1', strlen('ping 127.0.0.1'));
ignore_user_abort();
//ob_implicit_flush(true);
//ob_end_flush();
while ($out = socket_read($socket, 8192)) {
    echo $out;
    ob_flush();
}
//ob_start();

Python简单地做了:

sock.recv(8192)
for i in range(0, 4):
    sock.send(bytes(json.dumps('Ping successfull..'), 'UTF-8'))
    sleep(0.5)

我以为我能够“实时”缓冲数据,而不是像这样聚集在一起的数据:

"Ping successfull..""Ping successfull..""Ping successfull..""Ping successfull.."

我的思维在哪里出错了?这应该是非常直接的?我已经这么做了很多次,但这次我无法弄清楚我做错了什么:/

我还验证了它确实是AJAX / PHP网桥无法正常工作,PHP在收到数据时收到,用strftime("%H:%M:%S")进行验证,我得到了每个收据之间的预期差异。

1 个答案:

答案 0 :(得分:1)

AJAX使用HTTP,因此只有在请求完成时才会调用成功/失败的回调,并且在收到数据时没有获取数据的选项。您应该检查Web套接字,这将允许您处理来自服务器的流数据。


修改:您还可以查看multipart/x-mixed-replaceEventSource