ホームページ  >  記事  >  PHPフレームワーク  >  TP5 が WorkerMan と GatewayWorker を統合する方法

TP5 が WorkerMan と GatewayWorker を統合する方法

藏色散人
藏色散人転載
2019-12-03 16:09:413223ブラウズ

次のコラム workerman チュートリアル では、TP5 を WorkerMan および GatewayWorker と統合する方法を紹介します。

TP5 が WorkerMan と GatewayWorker を統合する方法

#TP5 は GatewayWorker を統合します

Windows バージョンのインストール

a) コンポーザー作成を使用します。 -project topthink/think testTG を使用して thinkphp5 をインストールします。

b) thinkphp5 のディレクトリに入り、ここに testTG があり、composer require workman/gateway-worker-for-win を使用して Windows バージョンのゲートウェイをインストールします。

c) 公式 Web サイトにアクセスして、デモが含まれている Windows バージョンのゲートウェイワーカーをダウンロードします。 http://www.workerman.net/download

d) ダウンロードした圧縮パッケージを解凍し、Applications/Yourapp 内のすべてのファイルを thinkphp5 ディレクトリ アプリケーション内の任意のフォルダー (ここでは Push という名前) にコピーします。

e) 解凍したフォルダー内の start_for_win.bat を thinkphp5 のルート ディレクトリ (アプリケーションと同じレベルのディレクトリ) にコピーします。

f) start_for_win.bat を右クリックし、[編集] をクリックして、内部のディレクトリを独自のディレクトリに変更します。ここでは

php application\push\start_register.php application\push\start_gateway.php application\push\start_businessworker.php
Pause

に変更されています。g) 保存して終了します。ダブルクリックして実行します。

Linux 版のインストール

a) composer create-project topthink/think testTG を使用して thinkphp5 をインストールします。

b) thinkphp5 のディレクトリに入ります。これは testTG です。composer require workman/gateway-worker を使用して、Linux バージョンのゲートウェイをインストールします。

c) 公式 Web サイトにアクセスして、デモが含まれている Linux バージョンのゲートウェイワーカーをダウンロードします。 http://www.workerman.net/download

d) ダウンロードした圧縮パッケージを解凍し、Applications/Yourapp 内のすべてのファイルを thinkphp5 ディレクトリ アプリケーション内の任意のフォルダー (ここでは Push という名前) にコピーします。

e) 解凍したフォルダー内の start.php を、アプリケーションと同じレベルのディレクトリである thinkphp5 のルート ディレクトリにコピーします。

f) start.php ファイルの最後の部分にある forarch ループの括弧内のパスを正しいパスに変更します。

コマンドライン php start.php start で開始します。

TP5 統合WrokerMan

Windows 版のインストール

a) Composer create-project topthink を使用します。 /think testTW を使用して thinkphp5 をインストールします。

b) thinkphp5 のルート ディレクトリ (testTW) を入力します。まず、composer require topthink/think-worker,

を使用し、次に、composer require workman/workerman-for-win を使用して、workerman をインストールします。インストールが成功したら、vendor\workerman\workerman を削除します。

c) thinkphp5 ルート ディレクトリ (つまり、アプリケーションと同じレベルのディレクトリ) にserver.php を作成し、内容を編集します。

<?php
efine(&#39;APP_PATH&#39;, __DIR__ . &#39;/application/&#39;);
define(&#39;BIND_MODULE&#39;,&#39;push/Worker&#39;);
// 加载框架引导文件
require __DIR__ . &#39;/thinkphp/start.php&#39;;

d) ワーカーマンのコントローラーを作成し、Worker.php という名前を付けます。 application/push/controller にはディレクトリが存在せず、独自に作成されます。次の内容を追加します:

protected $socket = 'websocket://127.0.0.1:2346' ここで、127.0.0.1 はソケット サーバーの IP アドレスです。このマシンのポート 2346 をリッスンします。

<?php
namespace app\push\controller;
use think\worker\Server;
class Worker extends Server
{
    protected $socket = &#39;websocket://127.0.0.1:2346&#39;;
    /**
     * 收到信息
     * @param $connection
     * @param $data
     */
    public function onMessage($connection, $data)
    {
        $connection->send(&#39;我收到你的信息了&#39;);
    }
    /**
     * 当连接建立时触发的回调函数
     * @param $connection
     */
    public function onConnect($connection)
    {
    }
    /**
     * 当连接断开时触发的回调函数
     * @param $connection
     */
    public function onClose($connection)
    {
        
    }
    /**
     * 当客户端的连接上发生错误时触发
     * @param $connection
     * @param $code
     * @param $msg
     */
    public function onError($connection, $code, $msg)
    {
        echo "error $code $msg\n";
    }
    /**
     * 每个进程启动
     * @param $worker
     */
    public function onWorkerStart($worker)
    {
    }
}

e) コマンド ラインから実行し、リッスン サービス php server.php

f) 任意の場所に新しい HTML ファイルを作成します。内容は次のとおりです:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script>
ws = new WebSocket("ws://localhost:2346");
ws.onopen = function() {
    alert("连接成功");
    ws.send(&#39;tom&#39;);
    alert("给服务端发送一个字符串:tom");
};
ws.onmessage = function(e) {
    alert("收到服务端的消息:" + e.data);
};
</script>

g) 保存してブラウザで開くと、リンクが成功していることがわかります。

Linux バージョンのインストール

a) Windows バージョンのインストールのステップ b) で、composer コマンドを実行するだけです。composer には、topthink/think-worker が必要です。以上です。残りの手順は変わりません。

GatewayWorker の簡単な使用法

<script type="text/javascript">
/**
 * 与GatewayWorker建立websocket连接,域名和端口改为你实际的域名端口,
 * 其中端口为Gateway端口,即start_gateway.php指定的端口。
 * start_gateway.php 中需要指定websocket协议,像这样
 * $gateway = new Gateway(websocket://0.0.0.0:7272);
 */
ws = new WebSocket("ws://127.0.0.1:8282");
// 服务端主动推送消息时会触发这里的onmessage
ws.onmessage = function(e){
    // json数据转换成js对象
    var bindUrl = "{:url(&#39;push/BindClientId&#39;)}";
    var data = e.data;
    var type = data.type || &#39;&#39;;
    switch(type){
        // Events.php中返回的init类型的消息,将client_id发给后台进行uid绑定
        case &#39;init&#39;:
            // 利用jquery发起ajax请求,将client_id发给后端进行uid绑定
            $.post(bindUrl, {client_id: data.client_id}, function(data){
            }, &#39;json&#39;);
            break;
        // 当mvc框架调用GatewayClient发消息时直接alert出来
        default :
        var text = e.data;
            var str = &#39;<li style="width:100%; height:60px; border:1px solid #000">&#39; +text +&#39;</li>&#39;;
            $(&#39;#message_box&#39;).append();
           // alert(e.data);
    }
};
</script>
class Push{
   
    public function helloAction () {
        $uid = $_GET[&#39;uid&#39;];
        session(&#39;uid&#39;, $uid);
        $view = new View;
        return $view->fetch();
    }
    public function BindClientIdAction () {
        
        $client_id = $_POST[&#39;client_id&#39;];
        // 设置GatewayWorker服务的Register服务ip和端口,请根据实际情况改成实际值
        Gateway::$registerAddress = &#39;127.0.0.1:1238&#39;;
        $bindUid = session(&#39;uid&#39;);
        // 假设用户已经登录,用户uid和群组id在session中
        // client_id与uid绑定
        Gateway::bindUid($client_id, $bindUid);
        // 加入某个群组(可调用多次加入多个群组)
        // Gateway::joinGroup($client_id, $group_id);
    }
    public function AjaxSendMessageAction () {
        $message = $_POST[&#39;message&#39;];
        // 设置GatewayWorker服务的Register服务ip和端口,请根据实际情况改成实际值
        Gateway::$registerAddress = &#39;127.0.0.1:1238&#39;;
        GateWay::sendToAll($message);
    }
}

以上がTP5 が WorkerMan と GatewayWorker を統合する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。