想把webman改成tcp协议(项目要求),做RPC服务有没有大佬提供思路或者帮助,可以有偿~
webman支持自定义进程,做这个很容易。
1、新建文件 process/Rpc.php 编写rpc进程
process/Rpc.php
<?php namespace process; use Workerman\Connection\TcpConnection; class Rpc { public function onMessage(TcpConnection $connection, $data) { static $instances = []; $data = json_decode($data, true); $class = 'service\\'.$data['class']; $method = $data['method']; $args = $data['args']; if (!isset($instances[$class])) { $instances[$class] = new $class; // 缓存类实例,避免重复初始化 } $connection->send(call_user_func_array([$instances[$class], $method], $args)); } }
2、打开 config/process.php 增加配置启动rpc进程
config/process.php
return [ // ... 这里省略了其它配置... 'rpc' => [ 'handler' => process\Rpc::class, 'listen' => 'text://0.0.0.0:8888', // 这里用了text协议,也可以用frame或其它协议 'count' => 8, // 可以设置多进程 ] ];
3、新建 service/User.php 服务 (目录不存在自行创建)
service/User.php
<?php namespace service; class User { public function get($uid) { return json_encode([ 'uid' => $uid, 'name' => 'tom' ]); } }
4、重启webman php start.php restart
php start.php restart
5、客户端调用
<?php $client = stream_socket_client('tcp://127.0.0.1:8888'); $request = [ 'class' => 'User', 'method' => 'get', 'args' => [100], // 100 是 $uid ]; fwrite($client, json_encode($request)."\n"); // text协议末尾有个换行符"\n" $result = fgets($client, 10240000); $result = json_decode($result, true); var_export($result);
以上客户端代码自己可以封装成一个类
最终结果打印
array ( 'uid' => 100, 'name' => 'tom', )
十分感谢 已通过官网收款码支持大佬,聊表心意
学习了
大佬就是大佬,我想了半个小时没想明白,他一句很简单就给解决了点赞了
这个是不是在linux才有用,在win下是不是不能有两个worker
windows不支持多进程的
windows服务区还是孩子用比较好,咱们做开发的,测试服务器和线上服务器必须linux呀,性能差太多了
webman支持自定义进程,做这个很容易。
1、新建文件
process/Rpc.php
编写rpc进程2、打开
config/process.php
增加配置启动rpc进程3、新建
service/User.php
服务 (目录不存在自行创建)4、重启webman
php start.php restart
5、客户端调用
以上客户端代码自己可以封装成一个类
最终结果打印
十分感谢 已通过官网收款码支持大佬,聊表心意
学习了
学习了
大佬就是大佬,我想了半个小时没想明白,他一句很简单就给解决了点赞了
这个是不是在linux才有用,在win下是不是不能有两个worker
windows不支持多进程的
windows服务区还是孩子用比较好,咱们做开发的,测试服务器和线上服务器必须linux呀,性能差太多了