共被编辑 2 次

版本 更新时间 贡献者 编辑原因 操作
#r2 7月29日 韩天峰6740 更新问题 查看

swoole runtime启用协程,fopen打开文件还没成功,新的数据包又到了

用swooleserver 开发业务程序,接收的数据比较大,需要保存到临时文件里,
当判断需要保存到文件时,创建临时文件,fopen打开文件,协程调度起作用了,
第二个数据包到了,这个包数据直接处理保存到临时文件,但是这时文件还没有打开?

if (!isset($this->cli_pool[$fd]['tmpfile']) || empty($this->cli_pool[$fd]['tmpfile'])){
        $this->cli_pool[$fd]['tmpfile']=$this->get_tmp_mail_file();
        $this->cli_pool[$fd]['fp']=fopen($this->cli_pool[$fd]['tmpfile'],"w");
        if (!$this->cli_pool[$fd]['fp']){
            throw new amException("Open tmp file fail".$this->cli_pool[$fd]['tmpfile']);
        }        
}
fwrite($this->cli_pool[$fd]['fp'],$this->cli_pool[$fd]['buffer'],$endflag+2); ***//此行报错"fp" 不存在***

这种情况,通常大家都是如何处理的?
用channel 每次连接创建一个 channel ,连接断开就释放是不是效率太低了,pop到会是绝对顺序的吗?
请高手给点建议

#r1 7月22日 捡爱1 创建问题 查看

swoole runtime启用协程,fopen打开文件还没成功,新的数据包又到了

用swooleserver 开发业务程序,接收的数据比较大,需要保存到临时文件里,
当判断需要保存到文件时,创建临时文件,fopen打开文件,协程调度起作用了,
第二个数据包到了,这个包数据直接处理保存到临时文件,但是这时文件还没有打开?

if (!isset($this->cli_pool[$fd]['tmpfile']) || empty($this->cli_pool[$fd]['tmpfile'])){

    $this->cli_pool[$fd]['tmpfile']=$this->get_tmp_mail_file();
    $this->cli_pool[$fd]['fp']=fopen($this->cli_pool[$fd]['tmpfile'],"w");
    if (!$this->cli_pool[$fd]['fp']){
        throw new amException("Open tmp file fail".$this->cli_pool[$fd]['tmpfile']);
    }        

}
fwrite($this->cli_pool[$fd]['fp'],$this->cli_pool[$fd]['buffer'],$endflag+2); //此行报错"fp" 不存在

这种情况,通常大家都是如何处理的?
用channel 每次连接创建一个 channel ,连接断开就释放是不是效率太低了,pop到会是绝对顺序的吗?
请高手给点建议