双向连续插座通信

时间:2014-01-09 07:41:35

标签: javascript php sockets jquery server-sent-events

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

发布数据

的Javascript(index.html的):

        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(SSE.php):

<?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);
}

当然,它没有用,因为当$ .post函数调用时,网页只有$ _POST数据。我只看到一个解决方案将参数发送到SSE.php(以及进一步的C程序) - 浏览器存储。还有其他办法吗?

谢谢,保罗

1 个答案:

答案 0 :(得分:1)

是的,SSE(Server-Sent Event)是单向通信(http://www.w3schools.com/html/html5_serversentevents.asp。但您可以使用WebSocket API发送和接收数据(请参阅“https://developer.mozilla.org/en-US/docs/Web/API/WebSocket)。