ホームページ  >  記事  >  バックエンド開発  >  GatewayWorker と ThinkPHP およびその他のフレームワークの組み合わせの紹介

GatewayWorker と ThinkPHP およびその他のフレームワークの組み合わせの紹介

不言
不言オリジナル
2018-07-05 14:59:247202ブラウズ

この記事では、主に GatewayWorker と ThinkPHP およびその他のフレームワークの組み合わせについて紹介します。これには一定の参考価値があります。今、あなたに共有します。必要な友人はそれを参照できます。

開発者が最も懸念するのは、いつ行うかです。 GatewayWorker を使用する場合 最も重要なのは既存の mvc フレームワーク (ThinkPHP Yii laravel など) とどのように統合するかですが、以下は公式が推奨する統合方法です。

#図を参照:

## 全体的な原則

#既存の

#mvc フレームワーク プロジェクト WithGatewayWorkerIndependentデプロイメントは相互に干渉しません

##すべてのビジネス ロジック # は、Web サイト ページの post/get から mvc フレームワークへの到達で完了します# GatewayWorker

クライアントからのデータを受け入れません

、つまり、GatewayWorkerはビジネス ロジックを処理しません, GatewayWorker は、一方向のプッシュ チャネルとしてのみ機能します

mvc フレームワークの場合にのみ機能します

Needデータをブラウザにアクティブにプッシュするmvc フレームワーク内でのみゲートウェイの API (GatewayClient) を呼び出すプッシュ## 具体的な実装手順

1.

Webサイトのページ

確立とGatewayWorker#websocket 接続2. GatewayWorker が

## を検出しました。 # ページが接続を開始しました

の場合、 接続に対応する client_id Web サイトのページ ## に送信します#3, Web サイト ページ

は、client_id (# であると仮定) を受信した後、Ajax リクエストをトリガーします##bind.php)client_id を mvc バックエンドに送信##4、mvc バックエンド bind.php client_id

を受信した後、GatewayClient を使用して Gateway::bindUid($client_id, $ uid)client_id を現在の uid (ユーザー ID またはクライアントの一意識別子) にバインドします。グループまたはグループ送信機能がある場合は、Gateway::joinGroup($client_id, $group_id) を使用して、対応するグループに client_id を追加することもできます。 5. ページによって開始されたすべてのリクエストは、メッセージの送信を含む統合処理のために mvc フレームワークに直接 post/get されます 6。 mvc フレームワークのビジネス プロセス中データを

uid

または グループ

に送信する必要がある場合は、GatewayClient インターフェイスを直接呼び出します。 ゲートウェイ::sendToUid ゲートウェイ::sendToGroup<span style="color: #ff0000;"><strong><span style="text-decoration: underline;"><span style="color: #000000; text-decoration: underline;"> </span> 送信を待つ</span></strong><span style="text-decoration: underline; color: #000000;"><strong>## サンプル コード</strong></span></span> GatewayWorker フラグメントGatewayWorker の Events.php コード (onConnect コールバックは 1 つだけ)設定)

<?php
use \GatewayWorker\Lib\Gateway;class Events
{    // 当有客户端连接时,将client_id返回,让mvc框架判断当前uid并执行绑定    public static function onConnect($client_id)
    {
        Gateway::sendToClient($client_id, json_encode(array(            &#39;type&#39;      => &#39;init&#39;,            &#39;client_id&#39; => $client_id
        )));
    }    // GatewayWorker建议不做任何业务逻辑,onMessage留空即可    public static function onMessage($client_id, $message)
    {

    }
}

Web サイト ページ js フラグメント

/**
 * 与GatewayWorker建立websocket连接,域名和端口改为你实际的域名端口,
 * 其中端口为Gateway端口,即start_gateway.php指定的端口。
 * start_gateway.php 中需要指定websocket协议,像这样
 * $gateway = new Gateway(websocket://0.0.0.0:7272);
 */
ws = new WebSocket("ws://your_domain.com:7272");// 服务端主动推送消息时会触发这里的onmessage
ws.onmessage = function(e){    // json数据转换成js对象    var data = eval("("+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(&#39;./bind.php&#39;, {client_id: data.client_id}, function(data){}, &#39;json&#39;);            break;        // 当mvc框架调用GatewayClient发消息时直接alert出来        default :
            alert(e.data);
    }
};

mvc バックエンド uid バインディング コード フラグメント

bind.php (GatewayClient バインディングを使用)

<?php//加载GatewayClient。关于GatewayClient参见本页面底部介绍require_once &#39;/your/path/GatewayClient/Gateway.php&#39;;// GatewayClient 3.0.0版本开始要使用命名空间use GatewayClient\Gateway;// 设置GatewayWorker服务的Register服务ip和端口,请根据实际情况改成实际值(ip不能是0.0.0.0)
Gateway::$registerAddress = &#39;127.0.0.1:1236&#39;;// 假设用户已经登录,用户uid和群组id在session中
$uid      = $_SESSION[&#39;uid&#39;];
$group_id = $_SESSION[&#39;group&#39;];// client_id与uid绑定
Gateway::bindUid($client_id, $uid);// 加入某个群组(可调用多次加入多个群组)
Gateway::joinGroup($client_id, $group_id);

mvc バックエンド メッセージ コード スニペット

send_message.php (GatewayClient を使用して送信)

<?php//加载GatewayClient。关于GatewayClient参见本页面底部介绍require_once &#39;/your/path/GatewayClient/Gateway.php&#39;;// GatewayClient 3.0.0版本开始要使用命名空间use GatewayClient\Gateway;// 设置GatewayWorker服务的Register服务ip和端口,请根据实际情况改成实际值(ip不能是0.0.0.0)
Gateway::$registerAddress = &#39;127.0.0.1:1236&#39;;// 向任意uid的网站页面发送数据
Gateway::sendToUid($uid, $message);// 向任意群组的网站页面发送数据
Gateway::sendToGroup($group, $message);

注意

以上仅是mvc框架与GatewayWorker官方推荐的结合方式,并不是强制使用此方式,开发者可以自由变化选择结合方式以适应自己的业务需求。


当然也可以采用客户端与GatewayWorker直接双向通讯的方式完成业务通讯。

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

Yii1.1框架关于日志配置的使用

用laravel dingo api插件库创建api的方法

以上がGatewayWorker と ThinkPHP およびその他のフレームワークの組み合わせの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。