workerman
首页
问答
分享
手册
市场
商业
AI客服系统源码
聊天系统源码
Webman AI
物联网
赞助商
webman
搜索
+
发布
提问
分享
webman插件
webman应用
登录
注册
分享
高速共享缓存插件分享
整体项目分为配置
服
务
、http-api
服
务
、websocket
服
务
三大部分,其中配置管理主要是兼容客户端生成的配置数据进行导入导出转换加载,底层使用MySQL进行储存,多
服
务
间使用Redis进行一级缓存每个区
服
下可能存在abc不同的
服
务
器实例,他们需要共享相同的区
服
配置;每个区
服
各自管理自己的数据库数据区域/数据库实例;每个区
服
下的
服
务
器实例对于数据库数据的要求是强需求,且为变动较为频繁的数据内容,与web的微
服
务
有区别,所以我们没有使用类似Nacos或者其他配置中心进行处理,从而用更适配当前场景的Redis作为缓存
服
务
。# 共享内存 在游戏开发中,许多
业
务
都是在内存中进行的计算处理,而我们上述的模式是多进程模式,进程间通讯是一个比较频繁出现的点;一开始解决这个问题是粗暴的将一些固定
业
务
固定在对应的进程上执行,尽可能避免进程间的通讯问题,后来随着
业
务
逐步的扩大,单纯限制
业
务
是没办法完全实现的,这时候有考虑过使用webman的channel;但实际上channel基于socket涉及系统内核态用户态的拷贝等问题,同时受网络影响受限,在一些
业
务
的计算处理上会带来比较高的延迟
问答
BusinessWorker面对高并发出现busy
没有操作数据库之类的只是做转发处理,从出现的情况来看和连接数也多少也没有直接关系,查看日志后里面让我去看: See http://wiki.workerman.net/Error2 for detail 这个网页,看了后说是
业
务
造成死循环导致的,但是从我代码来看并不会出现死循环,随后我在发送消息时我在
业
务
处理前监测它,但是并没有第一时间收到数据,而我在
业
务
处理完后也监测它,只要我接收消息就在
业
务
处理中就不会产生延迟,说明是在发送信息中就阻塞的
问答
内存持续上涨直到
服
务
器宕机,关闭控制器常驻内存后正常
一直发现项目在
服
务
器内存会上涨但不会降回去这个问题,但是幅度不大。 而且只要重启了项目就没了,所以就没怎么管。然后最近加了个接口给前端本地批量触发,所以这个问题就暴雷了,
服
务
器内存会持续上涨且不会降回去,直到宕机。 人工+AI排查了,没有内存泄漏。在开启控制器常驻内存的情况下前端本地几千条批量请求,
服
务
器内存(8GB)就占满了,关闭后再测试也就只上涨1~3%的使用率。不是完全不涨,但只会有少量上涨,不会像之前那样一路顶高,最后把
服
务
器内存打满。
问答
请教关于定时器卡死busy的问题。
有个后台
业
务
任
务
使用workerman的定时器运行,30秒运行一次,
业
务
代码只有一行就是使用php的exec调用了一个外部程序,这个程序平均耗时2秒,整体
业
务
最多耗时3秒左右,跑着跑着就卡死了,用strace
问答
gatewayworker心跳间隔大于60秒会触发onclose吗?
手册上说“客户端定时每X秒(推荐小于60秒)向
服
务
端发送特定数据,
服
务
端设定为X秒没有收到客户端心跳则认为客户端掉线,并关闭连接触发onClose回调。”pingInterval=60;$gateway->pingNotResponseLimit = 2;即客户端连接 pingInterval*pingNotResponseLimit=120 秒内没有任何请求则
服
务
端认为对应客户端已经掉线,
服
务
端关闭连接并触发onClose回调。问题二:如果是由于路由节点清理而断开的连接是否还能正确调用onclose($client_id)函数处理
业
务
?
问答
可有偿,有没有会监听本地变量改变,然后发送消息给
服
务
器/客户端
#### 问题描述 有没有会监听本地变量改变,然后发送消息给
服
务
器/客户端,目前tcp socket用的workerman连成功了,但只能连接上的时候发一次消息 ```php <?
问答
如何为数据库模型动态设置连接(thinkorm)
#### 问题描述
业
务
场景为一个主库,多个
业
务
库,类似多租户场景,主库数据共享,之前使用tp框架时,使用的方案是针对每个请求生命周期,根据参数在中间件中动态设置默认数据库连接。主库模型指定连接,
业
务
库模型不指定连接,会使用默认连接。请问在webman中该如何设计,避免模型需要指定数据库连接及无法使用模型中的事件?
问答
关于webman的异常和中间件问题
public function process(Request $request, callable $next): Response { // 如果是options请求,不处理
业
务
但是有时候会在
业
务
里面抛出
业
务
异常,这是很常见的需求。
问答
Event事件是否异步执行?
有一个疑问 ```asp https://github.com/webman-php/event ``` 这个插件里的
业
务
逻辑是否异步执行?> 'webman', 'age' => 2 ]; Event::emit('user.register', $user);//触发事件,需要等
业
务
完成才能返回吗
问答
宝塔安装的进程管理器重启
服
务
,监听的端口下的进程数量会增加
gateway->registerAddress = '127.0.0.1:' . config('worker_port.register'); //初始化register register
服
务
必须是然后重启进程守护任
务
如下:  再查看端口执行的进程: !
问答
阿里云香港
服
务
器启动Gateway,华北2区启动businesswoker 和 register ,Gateway连不上businessworker
目的是香港Gateway提供亚洲地区访问 business放内地,实现同
服
问答
现在webman有两个
业
务
一个是对外的API 还有一个是admin
#### 问题描述 但是他们共用一个后台进程 可否让admin 单独开自己的webman进程 这样 api 和webman 就互不干扰! 这里写问题具体描述
问答
求大神帮忙:workman 进程busy并自动重启
服
务
经常就出现busy状态 使用strace查看提示如下信息 ``` 18:15:07.511241 write(1, " >>Send dat"..., 125) = -1 EAGAIN (Resource并且socket传输的信息只作为前端交互信息使用,并没有复杂的后端
业
务
。
问答
GatewayWorker报错SendBufferToWorker fail. May be the send buffer are overflow
昨天开始有时会出现页面的websocket页面客户端请求
服
务
端没有响应,查看了workerman.log日志发现有个报错 2017-12-14 14:00:00 pid:27368 SendBufferToWorker今天早上问题又出现了,按报错信息找了一下发现是9260进程
业
务
流程好像被卡住,但是没看懂是卡在哪个资源读写上了,有大佬能帮忙看一下吗?
文档
心跳
> 心跳的数据格式没有要求,
服
务
端能识别即可。 ## 心跳示例 ```php <?connection临时设置一个lastMessageTime属性,用来记录上次收到消息的时间 $connection->lastMessageTime = time(); // 其它
业
务
逻辑,则
服
务
端认为客户端已经掉线,
服
务
端关闭连接并触发onClose。例如浏览器最小化js被暂停、浏览器切换到其它tab页面js被暂停、电脑进入睡眠等等、移动端切换网络、信号变弱、手机黑屏、手机应用切换到后台、路由故障、
业
务
主动断开等。更严格一点,
服
务
端也应该定时发起心跳数据,并且客户端需要定时监测
服
务
端的心跳数据是否超时,超过规定时间未收到
服
务
端心跳数据应该认定连接已经断开,需要执行close关闭连接,并重新建立新的连接。
分享
基于webman + layui 重构的admin管理后台
### 软件介绍 `SWIFTADMIN` 是一款基于 webman + Layui 开发的 http
服
务
框架,提供了一个简单易用的(权限)后台管理系统, 拥有极简的封装扩展,特别适合中小
企
业
和个人站长用于开发exif * 开发环境下关闭禁用PHP函数exec、putenv、proc_open、proc_get_status、pcntl_signal[如果存在] ``` 2、Windows环境下启动开发
服
务
``` 找到根目录下的Windows.bat文件,双击执行该文件即可启动
服
务
。``` 3、Linux环境下启动开发
服
务
``` 执行命令:php start.php start # 启动开发
服
务
执行命令:php start.php stop # 停止开发
服
务
执行命令:php start.php restart # 重启开发
服
务
守护进程:php start.php start -d # 启动守护进程 一般为生产环境/修改文件后无法自动重载
分享
workerman开发文档
具体工作内容为:维持
服
务
端与客户端的长链接,将客户端的数据转发给worker进程(目前是udp协议,有需要可以自行改成tcp),worker进程做实际的
业
务
处理,有需要时将结果数据发给gateway进程**ChatDemo进程模型特点** 1、有两个slave进程,一个负责网络IO并维持客户端链接,一个负责
业
务
处理 2、长链接,客户端与gateway之间是TCP长链接,通过这个链接实现客户端与
服
务
端的双向通信让gateway只负责网络IO,不负责
业
务
,就是因为
业
务
频繁变化,可能会有致命的错误(例如调用了一个不存在的函数)导致进程退出,进而导致用户链接断开。3、热更新 由于gateway进程没有
业
务
逻辑,所以geteway进程极少有代码更新。而worker进程由于负责
业
务
逻辑,会有经常性的代码更新。这个方法里面主要是处理
业
务
逻辑。$message是客户端发过来的未作任何加工的原始数据,通过商定的协议去解析$message,然后根据数据内容做路由分发,运行同的
业
务
函数等。
问答
使用静态变量存储房间
如果是一个
业
务
进程,用静态变量存储房间信息没问题。 如果是设置->count为多进程,就会实例化多个静态变量。有办法在多个进程下共享一个静态变量吗。 **如果只执行一个
业
务
进程,在onmessage处理房间战斗逻辑,是否会有并发问题**
问答
redis 队列 不更新
update_out_order_v1"; public $connection = 'default'; public function consume($quedata){ //更新订单
业
务
A echo "a"; } } 当我把
业
务
改成B echo "b"; 更新代码 restart -d 之后 还是echo "a"; 必须 要重新命名 队列名称 才能起效!
问答
请问如何做到接收http请求,推送mqtt消息?
request_count >= MAX_REQUEST) { $mqtt->close(); Worker::stopAll(); } }; Worker::runAll(); ```
业
务
大概是:需要一个http
服
务
端用来接收http的请求,拿到数据经过处理以后,在用mqtt进行推送。
服
务
端启动时不会报错,但是当进程达到设定好的5000次执行关闭并重新开启的时候,由于mqtt还没连接上,就收到http请求并且执行mqtt->publish()了,导致mqtt报错,No connection
« 上一页
1
...
50
51
52
53
54
55
56
57
...
221
下一页 »
« 上一页
53
下一页 »
赞助商
+成为赞助商
请作者喝咖啡
×
🔝