喜悦国际村 » PHP高级编程 » SOCKET与文本读写的问题

页: [1]
grom2008-6-18 03:31 PM
SOCKET与文本读写的问题

最近准备开始做一个东西,主要是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."\r\n");
}
}
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]
在不断循环过程中判断指定文件是否有新消息,有就发送,把消息写到文件中由另一个文件完成
[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';
}
[/php]

基本上是这样,但问题出来了,消息记录到文件中,到被取出来发送,会延迟几秒甚至几十秒,换用MYSQL做消息存储也差不多,有哪位知道为什么不?
我是在一个框架页里,上半部显示通信内容,下半部发送消息。

xieaotian2008-6-19 12:38 AM
你这个代码有点象我之前写及时消息系统。
只是我用的是VB去读取服务器上的PHP文件,判断是否最新,如果非就不弹出消息,如果是新的就弹出窗口,然后保存到本地。

grom2008-6-19 01:01 AM
奇怪就在,我每次循环都去检查那个文件,如果没有新消息时一切正常,一旦另一进程在写文件就会卡住一段时间。

grom2008-6-19 05:13 AM
还有哪位有接触过类似的,指点指点

xieaotian2008-6-19 05:56 AM
服务器推技术

grom2008-6-19 06:16 AM
现在是在速度上卡了


查看完整版本: SOCKET与文本读写的问题


Powered by Discuz! Archiver 6.1.0  © 2001-2006 Comsenz Inc.
Processed in 0.006694 second(s), 2 queries