页:
[1]
|
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做消息存储也差不多,有哪位知道为什么不?
我是在一个框架页里,上半部显示通信内容,下半部发送消息。 |
| xieaotian | 2008-6-19 12:38 AM |
|
你这个代码有点象我之前写及时消息系统。
只是我用的是VB去读取服务器上的PHP文件,判断是否最新,如果非就不弹出消息,如果是新的就弹出窗口,然后保存到本地。 |
|
| 奇怪就在,我每次循环都去检查那个文件,如果没有新消息时一切正常,一旦另一进程在写文件就会卡住一段时间。 |
| xieaotian | 2008-6-19 05:56 AM |
|
| 服务器推技术 |
Powered by Discuz! Archiver 6.1.0
© 2001-2006 Comsenz Inc.
Processed in 0.006694 second(s), 2 queries |