Javascript 双向连续套接字通信

Javascript 双向连续套接字通信,javascript,php,sockets,jquery,server-sent-events,Javascript,Php,Sockets,Jquery,Server Sent Events,我正在尝试使用套接字编写C程序和网页之间的连续通信。我已经在网页上得到了使用SSE的建议。但SSE是一种单向沟通。所以我尝试通过jquery.post发布数据 Javascript(index.html): PHP(SSE.PHP): 是的,SSE(服务器发送事件)是单向通信(.但是您可以使用WebSocket API发送和接收数据(请参见“”)。是的,这是一种解决方案,但在我的情况下不是,因为我的数据传输是在网页和C程序(不支持WebSocket)之间进行的)在外部linux板上,所以我不确定

我正在尝试使用套接字编写C程序和网页之间的连续通信。我已经在网页上得到了使用SSE的建议。但SSE是一种单向沟通。所以我尝试通过jquery.post发布数据

Javascript(index.html):

PHP(SSE.PHP):


是的,
SSE(服务器发送事件)
是单向通信(.但是您可以使用
WebSocket API
发送和接收数据(请参见“”)。

是的,这是一种解决方案,但在我的情况下不是,因为我的数据传输是在网页和C程序(不支持WebSocket)之间进行的)在外部linux板上,所以我不确定是否可以使用@PaulPonomarev之类的东西C程序和服务器如何交互?正如您在这里看到的,通过TCP套接字。C程序是一个非阻塞服务器,它等待连接,在连接时接收消息并发送应答。我尝试使用会话存储,所以我添加了
$.post(“socket/SSE.php”),{text:counter});
到index.html和
if(isset($\u POST[“text”]){send(“Value posted”);$\u SESSION[“text”]=$\u POST[“text”];}if(isset($\u SESSION[“text”]){send(“SESSION start”);$text=$\u SESSION SESSION[“text”;}
。但是现在SSE一直在写一个值,尽管“counter”变量是递增的
        function update_content() {
            var sse = new EventSource("socket/SSE.php");
            sse.onmessage = function(e) {
                $.post("socket/SSE.php", {text: "Hello World!"});
                console.log(e.data);
            };
        }

        update_content();
<?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_connect($sock, $address, $port))?'connected':'refused';
//send("connection: ".$msg);

$text = $_POST["text"];
send("Trying to write $text");
$msg = (false === socket_write($sock, $text, strlen($text)))?"Error":"Success";
//send($msg);
$msg = (false === ($buf = socket_read($sock, 1024)))?'Error':'Success!';
send($buf);
sleep(2);
}