我用gatewayworker做了一个客服系统,但是在使用中,经常会遇到 无法连接的问题。于是通过手册介绍的方法进行了调试。
发现有一个 进程是busy,而此时连接正好被分配到了这个worker,就出现了无法连接。
继续排查,发现 是卡在了 等待fd为11的描述事件。然后能看到是发送一个原子的 cas命令
再继续发现,fd为11的是 监听端口 2207的 globaldata服务。为了保证对进程之间的数据的一致性,我采用了globaldata组件,并且为了保证操作的唯一性,我用了cas 操作。根据手册的写法
do
{
$old_value = $new_value = $global->user_list;
$new_value[] = 4;
}
while(!$global->cas('user_list', $old_value, $new_value));
像这样,写在一个死循环中的,这样如果 globaldata没有响应的话,会一值卡死在这。
到底该怎么解决这个问题呢?还望 walkor老大,不吝赐教!十分感谢!
看起来像是 $global->user_list 不存在导致的
globalData 发布了1.0.3版本,
cas在key不存在的情况下返回成功,请重新下载globalData试下
十分感谢,我试试