swoole_framework框架填坑

由于业务需求,采用了韩天峰老师的swoole_framework框架进行业务编写,在测试过程中遇到部分疑难杂症,再此记录


一、开启多个worker_num后,redis读写问题
问题描述:开启多个worker_num,redis读数据时失败,或读出:0*0 之类的数据。
解决过程:
  1. 首先明确了,开启多个worker_num后,这个bug几乎是必现的,特别是在set redis的时候,会返回false。多次调试没有结果,猜测是并发调用redis导致的异常,(在php代码中,get数据的时候是:0 但是在redis客户端查看数据的时候却是好的)。
  2. 由于是做同步ppt笔记、鼠标演示的项目,里面有比较频繁的读写redis的地方,却只在翻页的时候(给各个房间中的成员发送翻页消息,各个成员重新进入页面房间时,发生问题。)出现,而且只有master(演示者)出现。查看log发现log记录:log->master is not found.,猜测是否是因为这一段报错,导致程序发生了某些不可预知的bug,于是决定找到报错的原因。
  3. 发现是因为config类没有获取到log这个config导致错误信息无法记录二抛出的错误。去github上查看韩天峰老师的项目代码,发现config中并没有配置log.php这个文件,而是在server.php的构造函数中声明了log类。(错误路径: vendor/matyhtf/swoole_framework/libs/factory/log.php)
解决方法:在configs 目录中加入log.php
<?php
$log['master'] = array(
    'type' => 'FileLog',
    'file' => ROOT_PATH . '/log/swoole.log'
);
return $log;
二、php webim_server.php start之后无法stop
找到log下面的webim_server.pid,查看其中的pid
执行
kill -9 pid
原因:在task中执行了某些操作,但是在stop的时候task仍无法结束 ,导致stop只停掉了websocket,而没有结束task,只能手动去kill掉,然后重新启动,主要关注task中的线程任务,记得及时回收。
三、在守护进程中,有时无法执行system命令操作shell
尝试使用nohup命令代替守护进程启动
nohup php webim_server.php start &
发现nohup的方法也会导致以上情况,考虑是onTask中没有return信息,导致线程没有被回收,从而变成僵尸线程,占用了线程创建的资源,于是尝试保证onTask方法有return 值,效果还在查看中。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值