91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux下搭建swoole服務的方法

發布時間:2021-01-16 12:20:55 來源:億速云 閱讀:156 作者:小新 欄目:編程語言

這篇文章主要介紹Linux下搭建swoole服務的方法,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

一、安裝swoole服務

1.下載swoole源碼,下載地址: https://github.com/swoole/swoole-src/releases

2.將tar包上傳到/usr/local/src/swoole下面,這里面存儲安裝源文件。

3.解壓源文件,tar –xvfswoole.tar

4.進入到剛解壓的目錄下輸入命令phpize

5.注意:phpize是php-devel中的東西,它可以給PHP動態添加擴展,所以,請確保你的機器上安裝了php-devel軟件包。

6.接著,依次輸入如下命令:./configure,執行編譯檢測make,編譯swoole

7.缺少pcre和pcre-devel相關軟件包,安裝上即可。

8.sudo make install

9.php.ini一般在etc下面 編譯安裝成功后,我們還需要修改php.ini,在其中加入swoole.so擴展:

10.extension=swoole.so

11.輸入php -m中能查看到swoole說明擴展安裝成功。

二、安裝apache啟動swoole服務

(1)測試是否安裝正確啟動swoole Php服務

(2)在apache中添加server.php文件,和client.php文件。一般目錄在var/www/html下面

(3)打開兩個終端 在這兩個文件所在的目錄下面打開這兩個文件,可以實現socket長連接服務。

安裝lsof:yum -y install lsof

三、配置Server端

class WebSocketService {
 
   private static $instance = NULL;
   public $tagindex = 0;
   public    $server    = null;
   public   $office_cache = null;
   public    $timer_arr = [];    //該變量保存所有的定時器任務ID,每一個客戶端可以通過$timer_arr[客戶端ID]
   得到該客戶端建立的所有定時器
   public $conf      = [
       'host'            => '0.0.0.0',
       'port'            => 9999,     //服務使用端口
       'worker_num'      => 2,         //啟動worker進程數
       'task_worker_num' => 8,           //啟動task進程數
       'is_daemonize'    => 0,          //是否后臺運行:0-否,1-是
       'log_file'        =>'/tmp/swoole_webSocket_server.log',    //日志文件路徑
       'abc'              =>0,
   ];
 
   public function getTagIndex() {
       return $this->conf['abc'];
    }
 
   public function setSetTagIndex($index) {
       $this->conf['abc'] = 100;
       echo $this->getTagIndex();
    }
 
   public function __construct($config = []) {
       $this->office_cache = array('1' => '1', '3'=>'2');
       $this->conf = array_merge($this->conf, (array)$config);
    }
 
   //靜態方法,返回此類唯一實例 
   public static function getInstance(){
       if(empty(self::$instance)){ 
           echo "instance \n";
           self::$instance=new WebSocketService(); 
       } 
       return self::$instance; 
    }
 
   /**
    * 服務器端運行webSocket的入口
    */
   public function run() {
       try {
           $this->server = new \swoole_websocket_server($this->conf['host'],$this->conf['port']);
           $this->server->set(
                [
                    'worker_num'      => $this->conf['worker_num'],
                    'task_worker_num' =>$this->conf['task_worker_num'],
                    'daemonize'       => $this->conf['is_daemonize'],
                    'log_file'        => $this->conf['log_file'],
                ]
           );
 
           //注冊方法列表
           $this->server->on('open', [$this, 'open']);
           $this->server->on('message', [$this, 'message']);
           $this->server->on('task', [$this, 'task']);
           $this->server->on('finish', [$this, 'finish']);
           $this->server->on('close', [$this, 'close']);
 
           $this->server->start();
       } catch (\Exception $e) {
           var_dump($e->getCode() . ':' . $e->getMessage());
       }
 
    }
 
   /**
    * 建立socket鏈接時,執行方法
    * @param $server
    * @param $request
    */
   public function open($server, $request) {
       $data = [
           'client_id' => $request->fd,
           'request'   => $request
       ];
       echo 'open<<'.$data['client_id'];
       $this->doOpen($data);
    }
 
   /**
    * 發送消息時,執行方法
    * @param $server
    * @param $frame
    */
   public function message($server, $frame) {
       echo "GET_mesage\n";
       $data = [
           'client_id' => $frame->fd,
           'data'      => $frame->data,
           'frame'     => $frame,
       ];
       $this->doMessage($data);
    }
 
   /**
    * 執行具體任務
    * @param $server
    * @param $task_id
    * @param $from_id
    * @param $data
    */
   public function task($server, $task_id, $from_id, $data) {
       $data['task_id'] = $task_id;
       $data['from_id'] = $from_id;
       $this->doTask($data);
    }
 
   /**
    * 任務結果處理
    * @param $server    服務器對象
    * @param $taskId    任務進程ID
    * @param $data
    */
   public function finish($server, $taskId, $data) {
       $data['task_id'] = $taskId;
       $this->doFinish($data);
    }
 
   /**
    * 關閉鏈接
    * @param $server        服務器對象
    * @param $client_id     客戶端唯一標識
    */
   public function close($server, $client_id) {
       $data = [
           'client_id' => $client_id
       ];
       $this->doClose($data);
    }
 
   /**
    * 客戶端成功連接到服務器時,會觸發該方法
     * 子類根據需求重寫該方法
    * @param $data
    * [
    *    'client_id',    //客戶端唯一標識
    *    'data',        //一些請求數據
    *    'frame',        //swoole的數據
    * ];
    */
   public function doOpen($data) {
       echo "建立連接成功";
 
    }
 
   /**
    * 得到Swoole Websocket Server
    *
    * @return null|\swoole_websocket_server
    */
   public function getServer()
    {
       return $this->server;
    }
 
   /**
    * 收到客戶端發來的消息,會觸發該方法
    * 子類根據需求重寫該方法
    * @param $data
    * [
    *    'client_id',    //客戶端唯一標識
    *    'data',        //客戶端發送過來的消息(數據)
    *    'frame',        //swoole的數據
    * ];
    */
   public function doMessage($data) {
       $info = json_decode($data['data'],true);
       $officeid = $info['officeid'];
       $client_id = $data['client_id'];
       echo"<<<<".$officeid.">>>>".$client_id."\r\n";
       if ($officeid == 1) {
           $this->sendMsgToClient('2',array('msg' =>'我是1號場地發送給你數據'));
       } else {
           $this->sendMsgToClient('1',array('msg' =>'我是3號場地發送給你數據'));
       }
    }
 
   /**
    * 具體的工作任務。需要通過 $this->doJob()來觸發
    * 子類根據需求重寫該方法
    * @param $data
    * [
    *    'client_id',    //客戶端唯一標識
    * ];
    */
   public function doTask($data) {
    }
 
   /**
    * 工作的結果處理。
     * 子類根據需求重寫該方法
    * @param $data
    * [
    *    'client_id',    //客戶端唯一標識
    * ];
    */
   public function doFinish($data) {
    }
 
   /**
    * 客戶端斷開時會自動觸發該方法
    * 子類根據需求重寫該方法
    * @param $data
    * [
    *    'client_id',    //客戶端唯一標識
    * ];
    */
   public function doClose($data) {
    }
 
 
   /**
    * 發送任務
    * @param $data    必須是數組,且要有$data['client_id']
    */
   public function doJob($data) {
       $this->server->task($data);
    }
 
   public function finishJob($data) {
       $this->server->finish($data);
    }
 
   /**
    * 發送消息到客戶端
    * @param $client_id
    * @param $msg
    */
   public function sendMsgToClient($client_id, $msg) {
       echo "發送信息給客戶端:{$client_id} | {$msg['action']['name']} | " . date('Y-m-dH:i:s') . "\r\n";
       $this->server->push($client_id, json_encode($msg));
    }
 
   /**
    * 關閉客戶端鏈接
    * @param $client_id
    */
   public function closeClient($client_id) {
       $this->server->close($client_id);
    }
 
   /**
    * 添加定時器
    * @param $client_id
    * @param $tick_time
    */
   public function addTimer($client_id, $tick_time) {
       //暫未實現,先使用swoole原生寫法
    }
 
   /**
    * 清除定時器
    * @param $client_id
    * @param $arr
    */
   public function clearTimer($client_id, &$arr) {
       if (is_array($arr)) {
           foreach ($arr[$client_id] as $val) {
                if (is_array($val)) {
                    foreach ($val as $v) {
                        swoole_timer_clear($v);
                    }
                } else {
                    swoole_timer_clear($val);
                }
           }
       }
       unset($arr[$client_id]);
    }
}

四、配置html前端

$(document).ready(function(){
    varwsurl = "ws://182.92.101.206:9999/";
    console.log(wsurl);
    varwebsocket = new WebSocket(wsurl);
    websocket.onopen= function(evt){
    console.log('Server:  打開WebSocket連接');
    };

    websocket.onclose= function(evt){
           console.log('Server:  關閉WebSocket連接');
    };

    websocket.onmessage= function(evt){
           varres = JSON.parse(evt.data);
           console.log('Server:  收到消息(來自:'+res+'請求)');
           console.log(res);
    };

    websocket.οnerrοr= function(evt){
           console.log('Server:  出現錯誤');
           console.log(evt.data);
    }

    functiondoSend(msg){
           console.log('Client:發送消息  ' + msg);
           websocket.send(msg);
    }
});

五、啟動start.php文件,cd到指定目錄下,然后PHP-CLI運行php start.php。這種方式是沒有啟用線程保護的關掉后程序結束線程還在占用。

require'src/WebSocketSwoole/WebSocketService.php';
// require './WebSocketService.php';
session_start();
// $demoService = new\WebSocketSwoole\WebSocketService();
$demoService =\WebSocketSwoole\WebSocketService::getInstance();
$demoService->run();

以上是“Linux下搭建swoole服務的方法”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

湖州市| 商洛市| 高青县| 华阴市| 云林县| 乐亭县| 霸州市| 伊宁市| 中卫市| 鄂州市| 宁海县| 通江县| 子洲县| 杭州市| 哈巴河县| 桂平市| 密山市| 蓝田县| 石城县| 靖边县| 泽库县| 永和县| 泗阳县| 泰安市| 德清县| 资溪县| 济源市| 东方市| 花莲县| 镇坪县| 广元市| 喜德县| 仙桃市| 永丰县| 张家口市| 安平县| 富顺县| 友谊县| 西安市| 资溪县| 师宗县|