使用easySwoole框架的时候遇到的问题和解决

1.程序和进程的全局变量需要区分,在 Worker 进程内对这些对象或变量进行写操作时,会自动从程序内存中分离,变为进程的全局对象或变量,可能会在接口方法中修改全局变量的值的时候只会在当前会话中生效。
2.使用ORM操作数据库时,使用AbstractModel的get或者all方法得到的数据会是一个model对象,可以在get或者all后通过toArray方法变成数组。可以通过对MySQL的配置中的returnCollection字段进行控制返回查询结果类型。
3.框架没有超全局变量,$_SESSION,$_POST,$_GET,$_REQUEST,主要是防止进程对全局变量操作造成数据污染。
4.swoole:4.8.6  easySwoole:3.5.1版本的Controller类命名需要严格保证首字母大写,否则会导致路由不到该控制器,即404错误。
5.当程序运行的时候,打印:\[FATAL ERROR\]: all coroutines (count: 1) are asleep - deadlock! 导致easySwoole进程终止:在bootstrap中添加一行配置\Swoole\Coroutine::set(['enable_deadlock_check' => false]); 即可


6.使用redis的连接池getObj获取连接之后需要执行recycleObj方法,否则很快就会在使用redis的时候出现error报错:[Call to a member function get() on null...],导致接口返回500错误


7.$request接收contentType为application/json的参数的时候需要使用getBody方法才能获取到前端传的json字符串,再通过json_decode才能获取到前端所传的字段的值。

# getBody获取 注意方法getParseBody()是获取不到json字符串中的字段的
$raw = $this->request()->getBody()->__toString();
$request = json_decode($raw, true);

# rawcontent获取
$raw = $this->request()->getSwooleRequest()->rawcontent();
$this->request = json_decode($raw, true);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
easyswoole是一个基于Swoole扩展的PHP框架,它提供了一种简单且高效的方式来构建WebSocket应用程序。WebSocket是一种在Web浏览器和服务器之间进行全双工通信的协议,它允许服务器主动向客户端推送数据,而不需要客户端发起请求。 使用easyswoole可以轻松地创建和管理WebSocket服务器,并处理来自客户端的连接、消息和事件。下面是一个简单的示例代码,演示了如何使用easyswoole创建一个WebSocket服务器: ```php <?php use EasySwoole\EasySwoole\ServerManager; use EasySwoole\EasySwoole\Swoole\EventRegister; use EasySwoole\EasySwoole\AbstractInterface\Event; use Swoole\WebSocket\Frame; use Swoole\WebSocket\Server; // 注册WebSocket事件回调 Event::getInstance()->set(EventRegister::onMessage, function (Server $server, Frame $frame) { // 处理收到的消息 $data = $frame->data; // TODO: 处理消息逻辑 // 向客户端发送消息 $server->push($frame->fd, 'Hello, client!'); }); // 创建WebSocket服务器 $server = ServerManager::getInstance()->getSwooleServer(); $server->on('WorkerStart', function () { echo "WebSocket server started\n"; }); // 启动服务器 EasySwoole\EasySwoole\Core::getInstance()->initialize(); ``` 上述代码中,我们首先注册了一个`onMessage`事件回调函数,用于处理收到的消息。在这个示例中,我们简单地向客户端发送了一条回复消息。然后,我们创建了一个WebSocket服务器,并在`WorkerStart`事件回调中输出了一条启动消息。最后,我们使用`EasySwoole\EasySwoole\Core::getInstance()->initialize()`启动了服务器。 请注意,上述代码只是一个简单的示例,实际应用中可能需要更复杂的逻辑来处理不同的消息和事件。你可以根据自己的需求进行扩展和定制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值