架构是gatewayworker + webman,bussiness进程放在webman里。逻辑是连接websocket的时候带上token,在onconnect事件根据token读取用户id,然后保存到session里,onmessage读取session里的用户id判断用户身份。本地websocket测试的时候 发送的第一个消息能获取到session,第二个和第三个获取不到,加上usleep后就可以了,或者连...
因为某些原因,每次改了代码,希望用restart,而不是用reload,所以使用了阿里云的alb作为负载均衡,alb支持优雅中断功能,就是后端服务出现异常,暂时不会中断与客户端的连接,但是刚才试了下,restart后,客户端立马中断了连接,是不是restart会主动关闭所有已连接的客户端...
onmessage是一条消息一条消息处理的?哪怕第一条消息涉及到网络操作,也要等第一条消息执行完毕,第二条消息才会执行? 输出 连着发送 ...
用的webman+GatewayWork,因为代码需要保存一些变量,用了context的,http下没有问题,但是用websocket发现,不同的message事件,获取的context里的值是一样的,要怎么改才能针对每个message...
webman使用gateway-worker插件,bussiness配置name不起作用,bussiness中异常无法通过config/exception.php配置的类捕获 进程名字还是 plugin.webman.gateway-worker.worker bussiness进程中的业务代码异常不能被config/exception.php...
问题描述 这里详细描述问题 程序代码 $options = [ 'max_conn_per_addr' => 1000, // 每个域名最多维持多少并发连接 'keepalive_timeout' => 30, // 连接多长时间不通讯就关闭 'connect_timeout' => 30, // 连接超时时间 ...
因为有一些数据是跟请求绑定的,如果用传统的fpm,可以用静态类,继承父类来实现,协程可以用上下文来实现,但是webman就不知道怎么实现了...
在业务代码里写了sleep(10),请求后,看到浏览器是一直在转。然后修改代码,保存,webman会自动reload,可以看到请求立马结束了,没有在转了,这是不是说明reload后,原来的请求被暂停了?...
在控制器中,获取当前请求的id,每次都是1,就算在同一个进程里也是1,workerman文档中不是写了,这个id会自增 吗 print_r($request ->connection ->id );...
为了方便,每次从数据库中查到得数据,都会存放在一个类得变量里,因为是游戏行业,所有得数据都是根据用户id查得,放在类得缓存里,这样业务复杂,不同得函数里都调方法查询数据时,不用每次查数据。但是这样一来,这个类就会占据很大得内存,目前想得是,请求结束后,就把当前请求设置得变量内容清除掉,不知道用什么方法...
1、bussiness 开了8个进程,一台设备连接上后,发送了10多次消息,发现每次都是同一个进程在处理,这是因为正好如此还是workerman固定了一个连接建立后,后续消息都是同一个进程在处理 2、Gatewayworkderman分离部署,Gateway,bussiness 都可以部署多台,register能部署多台吗?如果部署多台,是不是会把Gateway bussiness 分割成多个集群...
目前公司考虑上k8s,没有运维,开发去部署。目前我想到的上k8s的话,有以下问题 单台机器 pod不固定,workerman进程数量没办法设置 如果把代码放入镜像中,每次修改代码后需要更新镜像,这样应该是不能做到平滑重启...
Trying to access array offset on value of type bool in file /var/www/workerman_gateway/vendor/workerman/workerman/Worker.php on line 770 项目运行在docker中,代码报错的地方是 $user_info = \posix_getpwuid(\posix_getuid()); ...
在onmessage里,直接 self::$globaldata_worker ->increment( 'process_cnt', 1 ); 发现最后process_cnt这个值有问题,取出来的值是null,貌似需要初始化为0才行,但是这个初始化不知道在什么时候进行...
gateway的bussinesswork中onmessage获得message是请求头,而不是客户端发送的信息 客户端 for( $i = 0;$i<=1;$i++ ){ $con = new AsyncTcpConnection('ws://x.x.x.x:8282'); $con ->onError = function(AsyncTcpConnection $con...
考虑到一个场景,当前有10万台设备连接,如果因为代码或者服务器原因,所有设备断开了连接,下次重启后,所有设备都会同时连上,因为连上后有些数据库和redis的操作,服务器完全抗不住。所以我想,如果一个gateway,同时有1000个正在发起连接,但是数据库和redis工作还没做完,后面设备发起连接时,直接拒绝这个请求。bussiness进程在处理完连接事件后,告诉gateway,gateway 就讲总的正在连接设备减1...
在gatewaywork的bussiness中使用redis-queue,onconnect时间中,给队列发送数据 /** * 当客户端连接时触发 * 如果业务不需此回调可以删除onConnect * * @param int $client_id 连接id */ public static function onConnect($client_id) ...
现在公司部署的gatewayworker在一台单机32核64g服务器上,现在要改成集群,看了文档,如果要改成集群,好像reload没用,要重新restart,文档写的是reload只对runall后面加载的文件有效。但是客户现在有10多万台设备在线,不想重新启动,因为重新启动会掉线。想问下有什么方案能改成集群,但是又不影响已经在线的设备...