最近准备开始做一个东西,主要是SOCKET相关,要和一个远程SOCKET端口进行通信,要保持长连接
开始用PHP帮助手册上的SOCKET FUNCTIONS部分的函数,怎么都不行,后来用FSOCKOPEN连上了
因为在通信过程中,需要交互,在下就用了一个很无奈的办法,大致代码如下:
<?php
$server = 'xxx.xxx.xxx.xxx';
$port = 'xxxx';
$fp = fsockopen($server, $port);
$flag = true;
while($flag){
$data = fgets($fp,2048);
echo $data.'<br />';
ob_flush();
$content = check_file();
if ($content != ''){
fwrite($fp,$content."rn");
}
}
function check_file(){
global $handle;
$file = 'announce/test.txt';
$contents = file($file);
$temp = $contents[$handle];
if($temp){
$handle ++;
$return = $temp;
}else{
$return = '';
}
return $return;
}
?>
在不断循环过程中判断指定文件是否有新消息,有就发送,把消息写到文件中由另一个文件完成
<?php
if(isset($_POST['content'])){
$content = ($_POST['content']) ? $_POST['content'] : ' ';
$file = 'announce/test.txt';
$handle = fopen($file, 'ab');
fwrite($handle, format_time().'|'.$content."n");
fclose($handle);
echo '1';
}else{
echo '0';
}
?>
基本上是这样,但问题出来了,消息记录到文件中,到被取出来发送,会延迟几秒甚至几十秒,换用MYSQL做消息存储也差不多,有哪位知道为什么不?
我是在一个框架页里,上半部显示通信内容,下半部发送消息。