<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 一、安裝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服務的基本步驟的詳細內容
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看