Swoole入門:拆分我們的服務(獨立資料庫操作層)
阿新 • • 發佈:2019-02-01
需要注意的是:傳送郵件和贈送虛擬幣(積分)這2個task,是必須在使用者資料入庫成功之後,才投遞的。
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
。
至此就完成了資料庫操作服務的拆分
。
swoole_client
有兩種方式:同步阻塞客戶端和非同步非阻塞客戶端。
*
1、php-fpm/apache環境下只能使用同步客戶端
2、非同步客戶端只能使用在cli命令列環境
*
我們的案列中,addUser.php是web網站要在瀏覽器上供使用者訪問的,所以必須使用”同步阻塞客戶端”的方式;而在user_reg_server中我們其實還可以使用”非同步非阻塞客戶端”的方式。