我正在PHP和Python守护进程之间进行进程间通信。 python守护程序充当服务器。从PHP开始,我发送初始数据,然后守护进程继续发送一些数据,直到发送“Stop”并且PHP停止读取并关闭连接。
Python服务器:
from socket import socket as sock
s = sock()
host = "localhost"
port = 5903
s.bind((host, port))
print host, port
s.listen(5)
while True:
c, addr = s.accept()
print 'Got connection from', addr
y = c.recv(1024)
print y
while True:
x = raw_input()
c.send(x)
if x == "Stop":
break
PHP客户端:
<?php
//ob_implicit_flush();
$host = "localhost";
$port = 5903;
$message = "Hello";
echo "Message To server :".$message;
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Create Error\n");
$result = socket_connect($socket, $host, $port) or die("Connect Error\n");
socket_write($socket, $message, strlen($message)) or die("Send Error\n");
echo "Reply From Server :";
while(1){
$result = socket_read ($socket, 1024) or die("Read Error\n");
if($result == "Stop")
break;
echo "<br />".$result;
}
socket_close($socket);
?>
每当我在服务器上键入内容并按 Enter 时,PHP上没有输出。通过按 ctrl + c 终止服务器上的连接时,所有发送的数据都以PHP显示。我猜它没有显示,因为它等待指定长度的数据流。我希望PHP客户端能够在收到后立即显示发送的数据。
我已经尝试使用以下代码的Python客户端做同样的事情,它会在收到数据后立即显示收到的数据。
Python客户端:
import socket
s = socket.socket()
host = "localhost"
port = 5903
print host, port
s.connect((host, port))
y = raw_input()
s.send(y)
while True:
x = s.recv(1024)
if x=="Stop":
break
print x
s.close
无论如何,PHP也可以做同样的事情吗?