所以我已经能够使用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的内容,而不必每次都重新创建并连接到套接字?
谢谢!
答案 0 :(得分:0)
如果您可以重写连接的服务器以使用websocket,您可以使用socket.io直接从浏览器连接。
正如其他人所说,维护持久的PHP连接可能会很棘手,但如果运行NodeJS(或类似)脚本来处理客户端连接是不可能的,那么您可以从同一个PHP脚本提供websockets。
尝试这种方法:
http://devzone.zend.com/209/writing-socket-servers-in-php/
你的toad.php脚本将在命令行上运行,监听你现有的套接字服务器,然后将数据提供给它自己的套接字服务器,浏览器直接连接到websocket。