thinkphp Swoole 8686 Operation not permitted

在配置Supervisord启动ThinkPHP的Swoole和队列监听服务时遇到权限问题,手动启动则正常。解决方法是停止Supervisord服务,然后手动启动Swoole进行测试,最后重启Supervisord。

在使用supervisord服务时,如果是把thinkphp swoole先添加启动配置文件/etc/supervisord.d/mySwoole.ini:

[program:sw_mi]
command=php think swoole restart
directory=/var/www/mi/
autorestart=true
startsecs=3
startretries=3
stdout_logfile=/var/log/wwwSwoole/sw_mi.out.log
stderr_logfile=/var/log/wwwSwoole/sw_mi.err.log
stdout_logfile_maxbytes=2MB
stderr_logfile_maxbytes=2MB
user=mi
priority=999
numprocs=1
process_name=%(program_name)s_%(process_num)02d

[program:th_mi]
command=php think queue:listen --tries=2
directory=/var/www/mi/
autorestart=true
startsecs=3
startretries=3
stdout_logfile=/var/log/wwwSwoole/th_mi.out.log
stderr_logfile=/var/log/wwwSwoole/th_mi.err.log
stdout_logfile_maxbytes=2MB
stderr_logfile_maxbytes=2MB
user=mi
priority=999
numprocs=1
process_name=%(program_name)s_%(process_num)02d

然后手动启动程序时,会出现:

Swoole 8686 Operation not permitted

这样的奇怪错误,解决办法是停止supervisord服务

systemctl stop supervisord

然后就可以手动启动swoole了,测试好之后,就可以重启服务了

systemctl start supervisord
### ThinkPHPSwoole实现聊天功能 在现代Web开发中,实时通信的需求日益增加。通过结合ThinkPHP框架和Swoole扩展,可以轻松构建高效的WebSocket聊天应用。以下是基于提供的引用内容以及相关技术细节的具体说明。 #### 1. 创建Chat控制器 在`app/index/controller/`目录下创建名为`Chat.php`的文件,并定义一个继承自`think\swoole\WebSocket`类的`Chat`控制器[^1]: ```php namespace app\index\controller; use think\swoole\WebSocket; class Chat extends WebSocket { public function onMessage($server, $frame) { // 解析客户端发送的消息数据 $data = json_decode($frame->data, true); // 将消息广播给所有连接的客户端 $this->sendToAll($data['msg']); } } ``` 上述代码实现了当接收到客户端消息时(`onMessage`),会解析JSON格式的数据并将其广播至所有已连接的用户。 #### 2. 配置Swoole多进程支持 为了提高性能和并发处理能力,需充分利用Swoole的多进程特性。这可以通过配置Swoole服务器参数来完成。例如,在启动脚本中设置工作进程数和其他必要的选项[^2]: ```php $serv = new \Swoole\Http\Server("0.0.0.0", 9501); // 设置多个worker进程以增强并发处理能力 $serv->set([ 'worker_num' => 4, ]); $serv->start(); ``` 此部分展示了如何利用Swoole强大的多线程机制提升系统的整体效率。 #### 3. 客户端JavaScript代码示例 为了让前端能够正常接收来自后端推送的信息,还需要编写相应的HTML页面及其嵌入式的JS逻辑: ```html <script> var ws = new WebSocket('ws://localhost:9502'); ws.onmessage = function(event){ console.log('Received Message:', event.data); }; </script> <form id="chatForm"> <input type="text" name="msg"/> <button>Send</button> </form> <script> document.getElementById('chatForm').addEventListener('submit',function(e){ e.preventDefault(); var msgInput = document.querySelector('[name=msg]'); ws.send(JSON.stringify({msg : msgInput.value})); }); </script> ``` 这段简单的表单允许用户输入文字并通过WebSocket协议即时传递给其他参与者[^3]。 #### 总结 综上所述,借助于ThinkPHP框架的强大生态体系加上Swoole出色的异步IO模型,开发者可以在较短时间内搭建起具备良好用户体验的在线聊天室解决方案。同时考虑到实际生产环境中的复杂需求,还可以进一步探索诸如权限验证、历史记录存储等功能模块的设计思路。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值