Websocket基础使用
最近的版本和初期版本有了很大差别,其中websocket路由这块就取消了,所以Websocket的使用方式也改变了。 本章主要介绍如何使用,至于原理将会在其他文章中提及。 thinkphp6.0中新增的一项就是Event,websocket服务这块依赖于Event,因此我们需要先创建一个Event
Recent Essays
最近的版本和初期版本有了很大差别,其中websocket路由这块就取消了,所以Websocket的使用方式也改变了。 本章主要介绍如何使用,至于原理将会在其他文章中提及。 thinkphp6.0中新增的一项就是Event,websocket服务这块依赖于Event,因此我们需要先创建一个Event
在 think-swoole 中,高级配置 server.listen(或者是系统底层对应的多端口监听)主要用于在一个 Swoole 服务中同时监听多个端口、绑定不同的协议或业务逻辑。 例如:你可以让主服务器运行高性能 HTTP API(8080端口),同时利用 listen 再额外开一个端口专门处
在 think-swoole 中,如果你不想把 RPC 逻辑混入全局的 swoole.receive 事件中,最直接、最高效的做法是利用 Swoole 原生的 onReceive 回调,在 config/swoole.php 的多端口监听 (listen) 中直接闭包绑定。 这种做法属于“物理隔离”
在 ThinkPHP 6.x / 8.x 结合 think-swoole 扩展的环境下,通过自定义配置文件直接增加 listen 端口并绑定原生回调是完全可行的。 think-swoole 的底层是基于 Swoole 的,它在框架初始化时会读取 config/swoole.php。我们可以利用 Sw
使用 think-swoole 官方自带的 RPC 功能,其底层的设计思路非常精妙:它是通过接口(Interface)进行契约绑定的。 [1] 官方自带 RPC 的核心优势在于,它不仅为你准备好了服务端的解析路由,还会自动在客户端项目里生成和映射代理类。你调用远程方法时,代码提示和本地调用一模一样。
在 ThinkPHP6 中,通过官方命令生成的默认 config/swoole.php 配置文件,其结构是一个庞大的、多维的一维或嵌套关联数组,并且默认不包含 listen 这一项配置。 如果您直接把我上面给出的简版 server 数组覆盖进去,会导致原本的默认配置(如热更新、连接池、RPC等)丢失
在 ThinkPHP6 中,配合封装的客户端,服务端的职责是:启动一个 TCP 监听端口,接收请求、按照约定协议(如 EOF)拆包、解析 JSON-RPC 2.0 协议、动态调用对应的服务类方法,最后将结果打包返回。 如果使用 think-swoole 扩展,最优雅的方式是利用其提供的自定义事件监听
为了在原生 PHP 环境(如 FPM/Apache)下同时支持同步阻塞调用(一问一答)和异步非阻塞调用(发出请求后不等待,后续并发统一收包),最经典的架构是利用 stream_socket_client 的非阻塞模式结合 stream_select 进行多路复用。 以下是完整重构后的 JsonRpc
在 ThinkPHP6 中使用 Swoole 客户端封装 JSON-RPC 客户端,最核心的高效做法是结合 Swoole 的协程 TCP 客户端 (Swoole\Coroutine\Client) 与 PHP 的魔术方法 (__call),从而实现像调用本地方法一样调用远程服务(RPC 代理)。 [
针对前文提到的 方案二(基于 onRequest 事件挂载的标准 JsonRPC 2.0 协议),客户端如果是 TP(ThinkPHP)项目,由于它走的是标准的 HTTP(S) 协议,有以下两种非常实用的调用实现方式。 写法 A:使用原生 GuzzleHTTP 客户端(高并发、支持连接池) 在 TP