Heim >PHP-Framework >Workerman >Wie TP5 WorkerMan und GatewayWorker integriert

Wie TP5 WorkerMan und GatewayWorker integriert

藏色散人
藏色散人nach vorne
2019-12-03 16:09:413263Durchsuche

In der folgenden Kolumne des Workerman-Tutorials erfahren Sie, wie Sie WorkerMan und GatewayWorker mit TP5 integrieren. Ich hoffe, dass es Freunden in Not hilfreich sein wird!

Wie TP5 WorkerMan und GatewayWorker integriert

TP5 integriert GatewayWorker

Installation der Windows-Version

a) Verwenden Sie Composer Create -project topthink/think testTG, um thinkphp5 zu installieren

b) Geben Sie das Verzeichnis von thinkphp5 ein, hier ist testTG, und verwenden Sie Composer require workerman/gateway-worker-for-win, um die Windows-Version von Gateway zu installieren.

c) Gehen Sie zur offiziellen Website, um die Windows-Version von Gateway-Worker herunterzuladen, die eine Demo enthält. http://www.workerman.net/download

d) Entpacken Sie das heruntergeladene komprimierte Paket und kopieren Sie alle Dateien in Applications/Yourapp in einen beliebigen Ordner im thinkphp5-Verzeichnis application, hier push genannt.

e) Kopieren Sie start_for_win.bat im entpackten Ordner in das Stammverzeichnis von thinkphp5, das sich auf der gleichen Ebene wie die Anwendung befindet.

f) Klicken Sie mit der rechten Maustaste auf start_for_win.bat, klicken Sie auf Bearbeiten, ändern Sie das darin enthaltene Verzeichnis in Ihr eigenes Verzeichnis, hier wird es in

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

g) Speichern und beenden. Zum Ausführen doppelklicken.

Installation der Linux-Version

a) Verwenden Sie Composer Create-Project Topthink/Think TestTG, um thinkphp5 zu installieren.

b) Geben Sie das Verzeichnis von thinkphp5 ein, Hier ist testTG. Verwenden Sie Composer, um die Linux-Version des Gateways zu installieren.

c) Gehen Sie zur offiziellen Website, um die Linux-Version von Gateway-Worker herunterzuladen, die eine Demo enthält. http://www.workerman.net/download

d) Entpacken Sie das heruntergeladene komprimierte Paket und kopieren Sie alle Dateien in Applications/Yourapp in einen beliebigen Ordner im thinkphp5-Verzeichnis application, hier push genannt.

e) Kopieren Sie start.php im dekomprimierten Ordner in das Stammverzeichnis von thinkphp5, das sich auf derselben Ebene wie die Anwendung befindet.

f) Ändern Sie den Pfad in den foresearch-Schleifenklammern im letzten Teil der start.php-Datei in Ihren korrekten Pfad.

Starten Sie in der Befehlszeile php start.php start.

TP5-IntegrationWrokerMan

Installation der Windows-Version

a) Verwenden Sie Composer Create-Project TopThink /think testTW, um thinkphp5 zu installieren.

b) Geben Sie das Stammverzeichnis von thinkphp5 ein, das testTW ist. Verwenden Sie zuerst Composer require topthink/think-worker,

und dann Composer require workerman/workerman-for-win, um Workerman zu installieren. Nach erfolgreicher Installation löschen Sie Vendorworkermanworkerman.

c) Erstellen Sie server.php im Stammverzeichnis von thinkphp5 (d. h. dem Verzeichnis auf derselben Ebene wie die Anwendung) und bearbeiten Sie den Inhalt.

<?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) Erstellen Sie den Workerman-Controller und nennen Sie ihn Worker.php. In application/push/controller existiert das Verzeichnis nicht und wird von selbst erstellt. Fügen Sie den folgenden Inhalt hinzu:

protected $socket = 'websocket://127.0.0.1:2346' wobei 127.0.0.1 die IP-Adresse des Socket-Servers ist. Hören Sie hier auf Port 2346 dieser Maschine.

<?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) Führen Sie es über die Befehlszeile aus und starten Sie den Abhördienst php server.php

f) Erstellen Sie an einem beliebigen Ort eine neue HTML-Datei. Der Inhalt ist:

<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) Speichern Sie es und öffnen Sie es mit einem Browser. Sie können sehen, dass der Link erfolgreich ist.

Installation der Linux-Version

a) Führen Sie einfach den Composer-Befehl in Schritt b) der Windows-Versionsinstallation aus: Composer benötigt Topthink/Think-Worker. Das war's, die restlichen Schritte bleiben unverändert.

Einfache Nutzung von 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);
    }
}

Das obige ist der detaillierte Inhalt vonWie TP5 WorkerMan und GatewayWorker integriert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen