PHP将数据流传输到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 个回答
1
AJAX是通过HTTP来工作的,所以当请求完成后,成功或失败的回调才会被调用。在请求数据的过程中,你无法获取到数据。你可以了解一下WebSocket,这种技术可以让你处理从服务器实时传输的数据。
补充:你也可以看看 multipart/x-mixed-replace
和 EventSource