[英]PHP receiving data from TCP socket repeatedly
這個想法是通過TCP套接字連接PHP網頁和C程序,以便該網頁等待來自C程序的連接並在建立連接后立即接收數據。 PHP套接字連接和數據接收的代碼如下:
PHP(socketRead.php):
$address = 'localhost';
$port = 5001;
if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
echo "Socket creation error";
}
else {
echo "Socket created <br/>";
}
if (($ret = socket_bind($sock, $address, $port)) < 0) {
echo "Host/port connection failed";
}
else {
echo "Host/port connection successful <br/>";
}
if (($ret = socket_listen($sock, 5)) < 0) {
echo "Socket error";
}
else {
echo "Waiting connection <br/>";
}
if (($msgsock = socket_accept($sock)) < 0) {
echo "Socket connection start error";
} else {
echo "Awaiting data <br/>";
}
//Connection established, reading data
if (false === ($buf = socket_read($msgsock, 1024))) {
echo "Read error";
} else {
echo "Data: ".$buf;
}
if (isset($sock)) {
socket_close($ret);
socket_close($sock);
}
echo "<br /> Socket closed";
為了從套接字動態讀取數據,我使用了jquery請求。
使用Javascript(index.html的):
function update_content() {
var request = $.get("socket/socketRead.php");
request.success(function(result) {
document.write(result);
});
}
update_content();
效果很好,直到我嘗試增加間隔以重復讀取數據。
使用Javascript(index.html的):
var timer = setInterval(function(){update_content();}, 1000);
第一次連接/接收仍然有效,但是當我嘗試再次連接時,我在C程序中收到“連接被拒絕”的信息。 您能幫我解決這個問題嗎?
您可以為此使用SSE。
服務器發送事件
https://developer.mozilla.org/en-US/docs/Web/API/EventSource
這不會回答您的php問題..但是SSE是針對您要嘗試執行的操作而制作的。
JS
var sse=new EventSource("sse.php");
sse.onmessage=function(e){
console.log(e.data)
};
sse.php
function send($data){
echo "id: ".time().PHP_EOL;
echo "data: ".$data.PHP_EOL;
echo PHP_EOL;
ob_flush(); // clear memory
flush();
}
header('Content-Type: text/event-stream'); // specific sse mimetype
header('Cache-Control: no-cache'); // no cache
$address='localhost';$port=5001;
while(true){
$msg=($sock=socket_create(AF_INET,SOCK_STREAM,SOL_TCP))?'created':'error';
send("Socket creation ".$msg);
$msg=($ret = socket_bind($sock, $address, $port))?'connected':'refused';
send("connection ".$msg);
//....
// do the rest
//.....
sleep(10);
}
注意1:不確定php語法是否正確,但這只是為了給您一個想法。
sse ..第二部分的另一個示例也使用json。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.