想要重复运行一段PHP代码,但不会丢失范围

时间:2013-04-24 13:13:28

标签: php jquery ajax sockets

所以我已经能够使用AJAX在我的网站上重复刷新div,使用以下代码:

var $container = $("#content");
    var refreshId = setInterval(function()
    {
        $container.load('toad.php').fadeOut("slow").load('response.php').fadeIn("slow"); ;
    }, 2000);

这很好用,toad.php每2秒执行一次,内容更新。

toad.php目前包含以下代码:

<?php 
if ( !($sock = socket_create(AF_INET, SOCK_STREAM, 0)) ) {
        $errorcode = socket_last_error();
        $errormsg = socket_strerror($errorcode);

        die("Couldn't create socket: [$errorcode] $errormsg \n");
    }

    echo "Socket created \n";

    if (!socket_connect($sock, '127.0.0.1', 45000)) {
        //$errorcode = socket_last_error();
        //$errormsg = socket_strerror($errorcode);
        echo "No sensor available to connect to.\n";
        //die("Could not connect: [$errorcode] $errormsg \n");
    }

    echo "Connection established \n";

    //Now receive reply from server
    if (false !== ($bytes = socket_recv($sock, $buf, 1200, MSG_WAITALL))) {
        echo "Read $bytes bytes from socket_recv(). Closing socket...";
    }           
    else {
         echo "socket_recv() failed; reason: " . socket_strerror(socket_last_error($sock)) . "\n";
    }

    socket_close($sock);

    echo $buf . "\n";
    echo "OK.\n"; 
?>   

这个问题是每次刷新div时都会创建并连接套接字。

如果我在toad.php中没有socket_create和socket_connect函数,那么socket_recv函数不知道套接字并且不起作用。

我的问题是如何让套接字接收代码循环并更新div的内容,而不必每次都重新创建并连接到套接字?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您可以重写连接的服务器以使用websocket,您可以使用socket.io直接从浏览器连接。

http://socket.io/

正如其他人所说,维护持久的PHP连接可能会很棘手,但如果运行NodeJS(或类似)脚本来处理客户端连接是不可能的,那么您可以从同一个PHP脚本提供websockets。

尝试这种方法:

http://devzone.zend.com/209/writing-socket-servers-in-php/

你的toad.php脚本将在命令行上运行,监听你现有的套接字服务器,然后将数据提供给它自己的套接字服务器,浏览器直接连接到websocket。