1. 程式人生 > >Swoole入門:拆分我們的服務(獨立資料庫操作層)

Swoole入門:拆分我們的服務(獨立資料庫操作層)

需要注意的是:傳送郵件和贈送虛擬幣(積分)這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中我們其實還可以使用”非同步非阻塞客戶端”的方式。