GatewayClient使用注意一些问题,尤其是服务器部署了多个workerman服务的

今天在把客服功能上线,发现聊天在服务器上面死活不成功,在本地怎么操作都没问题。

情况①绑定用户id的时候发现不成功

Gateway::bindUid($client_id, $kefu_id);

捣鼓了很久没发现问题,后来终于发现猫腻了,服务器里面有很多套系统有独立的workerman服务,而且这系统默认的就是那些端口,导致注册地址在其它服务中了,绑定就是失败了,解决方案就是修改配置,修改一个端口本项目专用


情况②聊天发现提示登录过期,就是判断SESSION的时候没数据,客户端发起的倒是正常,在后台客服登录后发送消息就提示登录过期了。

发现是gateway的问题,这是用gateway客户端发送消息的,目的就是可以实现随时推送,检查发现这个代码底层的注册地址默认是1236端口,问题找到了。

GatewayClient\Gateway

image.png

结论就是这个地址和内存里面的地址不一致导致session获取不在同一个作用域。那么接近方案也就非常容易了:初始化不就可以了。


在应用全局或者需要聊天的类里面配置客户端的注册地址就行了,问题解决了,下面这样初始化客户端的配置即可

// 初始化gateway,一定要统一配配置
public static function init_gateway()
{
    \GatewayClient\Gateway::$registerAddress = config('worker.register_address') . ':' . config('worker.register_port');
    //bs_log(\GatewayClient\Gateway::$registerAddress, 'worker_init', 'worker_init.log');
}

image.pngimage.png

评论/留言