PHP将数据流传输到AJAX调用

1 投票
1 回答
1531 浏览
提问于 2025-04-18 05:00

根据以下信息:

我希望能实现以下功能:

  • 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 个回答

1

AJAX是通过HTTP来工作的,所以当请求完成后,成功或失败的回调才会被调用。在请求数据的过程中,你无法获取到数据。你可以了解一下WebSocket,这种技术可以让你处理从服务器实时传输的数据。


补充:你也可以看看 multipart/x-mixed-replaceEventSource

撰写回答