遵循以下信息:
我希望实现以下目标:
通过做:
$.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")
进行验证,我得到了每个收据之间的预期差异。
答案 0 :(得分:1)
AJAX使用HTTP,因此只有在请求完成时才会调用成功/失败的回调,并且在收到数据时没有获取数据的选项。您应该检查Web套接字,这将允许您处理来自服务器的流数据。
修改:您还可以查看multipart/x-mixed-replace
和EventSource