Hyperf 框架做WebSocket 服务端及客户端的时候和grpc冲突与解决

博客讲述了作者在将公司原有业务由Ajax改为WebSocket过程中遇到的问题。使用Hyperf搭建聊天室时,服务启动后进程经常自动断开。经过排查,发现gRPC扩展可能是导致Hyperf关闭的原因。禁用gRPC扩展后,服务恢复正常。问题的根源可能在于gRPC底层使用HTTP/2与服务端的冲突。
摘要由CSDN通过智能技术生成

公司原有的业务消息推送是靠前端 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关闭!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值