公司原有的业务消息推送是靠前端 ajax 轮眉请求后端接口完成的。然后我新来的,让我改成 websocket 双向通信的来做消息推送。
简单的业务场景就是做一个聊天室,mq转发消息,在php bin/hyperf.php start 启动后,老是进程自动断掉:
一直找不到原因,后来看到官方文档 :https://hyperf.wiki/2.0/#/zh-cn/quick-start/install
说下面的这些扩展不兼容。
存在兼容性问题的扩展
由于 Hyperf 基于 Swoole 协程实现,而 Swoole 4 带来的协程功能是 PHP 前所未有的,所以与不少扩展都仍存在兼容性的问题。
以下扩展(包括但不限于)都会造成一定的兼容性问题,不能与之共用或共存:
- xhprof
- xdebug
- blackfire
- trace
- uopz
我检查了一下我的扩展,没有这些,那会是啥情况啊,swoole 从4.6.7 到 4.6.0 全部安装了一遍,还是这个问题,连接刚一启动就断掉。
我再次检查一下安装的扩展。
注意到有个grpc.
gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# 支持.
gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。于是果断禁掉!
接着重新打开hyperf服务,正常了!
grpc底层用的是http2来连接的,通过node.js做服务的,所以可能是这个原因导致hyperf关闭!