1. swoole サービスをインストールします
1. swoole ソース コードをダウンロードします (ダウンロード アドレス: https://github.com/swoole/swoole-src/releases#)
##2. tar パッケージを、インストール ソース ファイルが保存されている /usr/local/src/swoole にアップロードします。 3. ソース ファイル tar –xvfswoole.tar4 を解凍します。解凍したディレクトリに移動し、コマンド phpize5 を入力します。注意: phpize は php です。 -devel PHP に拡張機能を動的に追加できるため、php-devel パッケージがマシンにインストールされていることを確認してください。 6. 次に、次のコマンドを順番に入力します: ./configure、コンパイルと検出 make を実行、swoole をコンパイルします7. pcre および pcre-devel 関連のソフトウェア パッケージがありません。 、インストールするだけです。 8.sudo make install9.php.ini は通常、etc の下にコンパイルされてインストールされます。インストールが成功した後、php.ini を変更し、swoole.so 拡張子を追加する必要もあります。それ:10.extension=swoole.so11. php -m と入力すると、swoole が表示され、拡張機能が正常にインストールされたことがわかります。 2. Apache をインストールし、swoole サービスを開始します(1) インストールが正しいかテストし、swoole Php サービスを開始します(2) server.php を追加しますApache のファイルとクライアントの .php ファイル。一般ディレクトリは var/www/html 配下にあります (3) ターミナルを 2 つ開き、ソケットロング接続サービスを実現するために、これら 2 つのファイルが配置されているディレクトリ配下の 2 つのファイルを開きます。 lsof をインストールします: yum -y install lsof3. サーバー側を構成します
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]); } }4. 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); } });5. start.php ファイルを起動し、指定されたディレクトリに移動すると、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();PHP 中国語 Web サイト、多数の無料
swoole 入門チュートリアル 、オンライン学習へようこそ!
以上がLinux で swoole サービスを構築するための基本的な手順の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、バグの報告、機能の送信、コーディング、ドキュメントの改善など、スウールプロジェクトに貢献する方法の概要を説明しています。それは、初心者が貢献を開始するために必要なスキルとステップについて議論し、プレスを見つける方法は

記事では、スウールをカスタムモジュールで拡張し、手順を詳細に、ベストプラクティスを詳細にし、トラブルシューティングで説明します。主な焦点は、機能と統合を強化することです。

この記事では、高性能アプリケーション用のPHPでSwooleの非同期I/O機能を使用することについて説明します。インストール、サーバーのセットアップ、および最適化戦略をカバーします。ワードカウント:159

記事では、Swooleのプロセス分離の構成、安定性とセキュリティの改善などの利点、トラブルシューティング方法について説明します。

Swooleの原子炉モデルは、イベント駆動型の非ブロッキングI/Oアーキテクチャを使用して、高電流シナリオを効率的に管理し、さまざまなテクニックを通じてパフォーマンスを最適化します。(159文字)

記事では、PHPフレームワークであるSwooleの接続問題のトラブルシューティング、原因、監視、および予防について説明します。

この記事では、Swooleのパフォーマンスを監視および最適化するためのツールとベストプラクティス、およびパフォーマンスの問題の方法のトラブルシューティングについて説明します。

要約:この記事では、不適切なリソース管理や管理されていないコルーチンなどの一般的な原因を強調し、識別、分離、修正を通じて、スウールアプリケーションのメモリリークの解決について説明します。 Swoole TrackerやValgrindなどのツール


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

Dreamweaver Mac版
ビジュアル Web 開発ツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境
