反馈 webman-push插件两处BUG

meystack

bug描述

webman-push插件两处BUG

环境Windows10 PHP7.4 扩展都已经安装正常

1、api->trigger提交数据不成功,测试onApiClientMessage, var_dump无回显,没执行到这里

2、$request->rawBody() , 默认获取body数据存在获取无效的问题。诡异的是,有时候可以有时候不可以,
那么肯定就是BUG了,可以或者不可以的时候,数据 配置 KEY等完全一样;就连测试BUG的人都一样~_~!

程序代码或配置

  // 执行绝对是有问题的,没有正常发送结果
  $ch = $this->createCurl($this->_settings['api_address'], $s_url, 'POST', $query_params);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $post_value);
  $response = $this->execCurl($ch);
    /**
     * Get http raw body.
     *
     * @return string
     */
    public function rawBody()
    {
        // 获取body数据不成功,数字签名校验是正常的,就这里获取不到
        return \substr($this->_buffer, \strpos($this->_buffer, "\r\n\r\n") + 4);
    }

期待的结果及实际结果

这个BUG其实昨天做测试的时候就发现了,但是,当我从PHP7.3改为PHP7.4之后,就正常了,
我起初还以为是某个包或者函数不兼容7.3,今天临下班看了下,居然又无法接收到了,按照平时的编码习惯,
一个CURL函数写完了,基本上不会出岔子,所以就没往这里想,主要是,,这个插件吧,无异常,无日志,啥都没有就是接收不到,搞的我很尴尬。通过一点点的追踪发现了上述的两个问题;

1、发送的这个API接口,因为消息包含name-channels等,可以完全使用POST写死或者直接使用一个HTTP库更好一些,或者可以把自身的request扩展下,包装guzzlehttp一层可以自己写GET POST数据更稳定一些。增加一个加密也可以,这样数据通讯也安全了,如果可行,也可以参考C++ TCP链接里面常用的struct消息结构体来进行数据的捕捉!

2、rawBody函数,校验过了,但是。。。Server.php第666行,能不能错误信息不叫Invalid signature???这个错误提示搞的我怀疑人生了,我把发送签名,接收签名都打印出来,结果导致我以为

        // 一开始我以为是这里断言的,说实话,我对着电脑发呆了很久很久~
        if ($auth_signature !== $real_auth_signature) {
            return $connection->send(new Response(401, [], 'Invalid signature'));
        }

重现bug的步骤

按照webman-push文档搭建简易工程,接收不到,new Api()->xxxx执行这个控制器的时候,等待加载完毕的时间有点过长。。

系统环境及workerman/webman等具体版本

同上。

325 3 0
3个回答

meystack

补充一下:使用postman直接post /app/1024/event 修改rawBody后是可以正常输出信息的,
也就是端口监听是没问题的,只有curl和rewBody需要处理

  • 暂无评论
liziyu

正准备用,还没用呢!关注学习一下!~

  • 暂无评论
walkor

webman/push插件用的人挺多了,没有反馈过有这个问题。

windows下cmd可能会被不小心暂停,例如鼠标点击cmd窗口时就会暂停程序,这会导致进程无任何响应,这个和你说的现象类似。如果再次出现你说的问题,切换到cmd窗口,按esc键可以取消暂停,试下是不是这个问题。

如果还没解决,建议重新创建一个空的webman项目,安装webman/push试下,排除其它干扰。

  • meystack 20天前

    感谢亮哥,我现在这个工程代码写的太多了,只能一点点排查,我新建项目也不可以。但是我用postman直接发送计算好的HTTP+data确正常,然后我用一个纯新的环境测试了PHP7.3 PHP7.4发现是正常的,所以可能是我电脑更新某些补丁的问题。

🔝