Swoole入门:拆分我们的服务(独立数据库操作层) - Go语言中文社区

Swoole入门:拆分我们的服务(独立数据库操作层)


http://blog.csdn.net/github_26672553/article/details/79075801
前面我们简单学习了”swoole如何执行异步任务”?演示了一个“用户注册”的案列,大致的架构如下图:
这里写图片描述

需要注意的是:发送邮件和赠送虚拟币(积分)这2个task,是必须在用户数据入库成功之后,才投递的。

现在可以来完成我们的服务拆分(把数据库操作拆分出来)。
前面:http://blog.csdn.net/github_26672553/article/details/79075801
我们是在user_reg_server.php中:

if(用户数据入库操作){
  //再投递 其他2个task
}

现在我们需要把入库操作拆分成单独的一个服务,然后在user_reg_server.php中调用这个db_server.php
这里写图片描述

db_server.php代码如下:

<?php

/**
 * 这是数据库操作服务
 *
 */

$serv = new swoole_server("10.211.55.15", 9502);  // 又一个服务:因为我们在一台机器上,所以更改端口

// 接收
$serv->on('receive', function($serv, $fd, $from_id, $data) {

    // 处理用户数据入库
    // $userInfo = json_decode($data,true);
    // insert into user(`name`,`email`)values('{$userInfo['name']}','{$userInfo['email']}')

    $insert_result = 110; // 插入成功返回的id
    // 发送入库结果回去
    $serv->send($fd,$insert_result);
});


$serv->start();

user_reg_server里如何连接db_server?

$serv->on('receive', function($serv, $fd, $from_id, $data) {

    // 准备连接db_server这个数据库操作服务
    $client = new swoole_client(SWOOLE_SOCK_TCP);
    $client->connect("10.211.55.15", 9502); // 连接db_server
    $client->send($data); // 发送数据到db_server
    $dbResult = $client->recv(); // 接收db_server的返回内容

    if($dbResult){
        $serv->send($fd,$dbResult);
    }else{
        $serv->send($fd,"add user fail");
    } 
});

从上面代码可以看出:在user_reg_server的onReceive回调函数里,我们连接了db_server,把从前端传递过来的“用户注册数据”传递给了db_server,并接收db_server的返回数据,发送给调用user_reg_serve的客户端(也就是addUser.php)。

如果数据入口成功,addUser.php会收到字符串101,如果失败会收到add user fail

至此就完成了数据库操作服务的拆分

需要注意的是:
https://wiki.swoole.com/wiki/page/p-client.html

swoole_client有两种方式:同步阻塞客户端和异步非阻塞客户端。
*
1、php-fpm/apache环境下只能使用同步客户端
2、异步客户端只能使用在cli命令行环境
*
我们的案列中,addUser.php是web网站要在浏览器上供用户访问的,所以必须使用”同步阻塞客户端”的方式;而在user_reg_server中我们其实还可以使用”异步非阻塞客户端”的方式。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/github_26672553/article/details/79084299
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 23:23:46
  • 阅读 ( 904 )
  • 分类:数据库

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢