Swoole的RPC服务与ThinkPHP框架结合实例

说明

三个文件都处于同一目录下

Config.php

<?php
$config = [];
$config['User']['worker'] = '8888';
$config['User']['ip'] = '127.0.0.1';

$config['Order']['worker'] = '8887';
$config['Order']['ip'] = '127.0.0.1';

return $config;

订单服务swoole_server_order.php

<?php

class server{
    public function get_data($_arr){
        $action = $_arr['action'];
        $site = $_arr['site'];
        $param = isset($_arr['param']) ? $_arr['param'] : [];
        static $import = true;
        if ($import == true) {
            define('APP_PATH', "/usr/local/nginx/html/{$site}/application"); //框架目录
            define('RPC_RUN', true);
        }
        $import = false;
        $_REQUEST['argv_rpc'] = $action; //
        $path = "/usr/local/nginx/html/{$site}/thinkphp/base.php"; //base文件所在路径
        require_once $path;
        $_GET = $_POST = $param;
        $app = new \think\App();
        $data = $app->run();
        return $data;
    }
}
$serv=new swoole_server('127.0.0.1',8887);//创建服务
$serv->set(array('worker_num'=>2));
$serv->on("receive",function($serv,$fd,$from_id,$data){
    //$data 接受客户端发送的数据
    $data = json_decode($data,true);
    $server = new server();
    $result = $server->get_data($data);
    $serv->send($fd,json_encode(['data'=>$result]));//给客户端发送数据
});
$serv->start();


用户服务swoole_server_order.php

<?php

class server{
    public function get_data($_arr){
        $action = $_arr['action'];
        $site = $_arr['site'];
        $param = isset($_arr['param']) ? $_arr['param'] : [];
        static $import = true;
        if ($import == true) {
            define('APP_PATH', "/usr/local/nginx/html/{$site}/application"); //框架目录
            define('RPC_RUN', true);
        }
        $import = false;
        $_REQUEST['argv_rpc'] = $action; //
        $path = "/usr/local/nginx/html/{$site}/thinkphp/base.php"; //base文件所在路径
        require_once $path;
        $_GET = $_POST = $param;
        $app = new \think\App();
        $data = $app->run();
        return $data;
    }
}
$serv=new swoole_server('127.0.0.1',8888);//创建服务
$serv->set(array('worker_num'=>2));
$serv->on("receive",function($serv,$fd,$from_id,$data){
    //$data 接受客户端发送的数据
    $data = json_decode($data,true);
    $server = new server();
    $result = $server->get_data($data);
    $serv->send($fd,json_encode(['data'=>$result]));//给客户端发送数据
});
$serv->start();


swoole_client.php

<?php
$config = include_once './Config.php';
//客户端:
$site = $_GET['site'];
//$_GET['action'] = index/index/user
$action = $_GET['action'];
$client_info = $config[$site];

$cli = new swoole_client(SWOOLE_SOCK_TCP);
$cli->connect($client_info['ip'], $client_info['worker']);

$data = json_encode(['site' => $site, 'action' => $action]);
$cli->send($data);
$result = $cli->recv();//接收消息
$cli->close();
var_dump($result);

运行结果

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值