Maison  >  Article  >  cadre php  >  TP5 intègre WorkerMan et GatewayWorker

TP5 intègre WorkerMan et GatewayWorker

藏色散人
藏色散人avant
2019-12-30 13:54:023278parcourir

TP5 intègre GatewayWorker

Installation de la version Windows

a) Utilisez composer create-project topthink/think testTG pour installer thinkphp5.

b) Entrez dans le répertoire de thinkphp5, voici testTG, et utilisez composer require workman/gateway-worker-for-win pour installer la version Windows de gateway.

c) Accédez au site officiel pour télécharger la version Windows de gateway-worker, qui contient une démo. http://www.workerman.net/download

d) Décompressez le package compressé téléchargé et copiez tous les fichiers de Applications/Yourapp dans n'importe quel dossier du répertoire d'application thinkphp5, nommé ici push .

e) Copiez start_for_win.bat dans le dossier décompressé vers le répertoire racine de thinkphp5, qui est un répertoire au même niveau que l'application.

f) Cliquez avec le bouton droit sur start_for_win.bat, cliquez sur Modifier, remplacez le répertoire à l'intérieur par votre propre répertoire, ici, il est remplacé par

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

g) Enregistrez et quittez. Double-cliquez pour exécuter.

Installation de la version Linux

a) Utilisez composer create-project topthink/think testTG pour installer thinkphp5.

b) Entrez le répertoire de thinkphp5, Voici testTG. Utilisez composer require workerman/gateway-worker pour installer la version Linux de la passerelle.

c) Allez sur le site officiel pour télécharger la version Linux de gateway-worker, qui contient une démo. http://www.workerman.net/download

d) Décompressez le package compressé téléchargé et copiez tous les fichiers de Applications/Yourapp dans n'importe quel dossier du répertoire d'application thinkphp5, nommé ici push .

e) Copiez start.php dans le dossier décompressé dans le répertoire racine de thinkphp5, qui est un répertoire au même niveau que l'application.

f) Remplacez le chemin entre les crochets de la boucle de recherche dans la dernière partie du fichier start.php par votre chemin correct.

Démarrez sur la ligne de commande php start.php start.

Intégration TP5WrokerMan

Installation de la version Windows

a) Utiliser composer create-project topthink /think testTW pour installer thinkphp5.

b) Entrez le répertoire racine de thinkphp5, qui est testTW. Utilisez d'abord composer require topthink/think-worker,

, puis utilisez composer require workerman/workerman-for-win pour installer workererman. Une fois l’installation réussie, supprimez supplierworkermanworkerman.

c) Créez server.php dans le répertoire racine de thinkphp5 (c'est-à-dire le répertoire au même niveau que l'application) et modifiez le contenu.

<?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) Créez le contrôleur Workerman et nommez-le Worker.php. Dans application/push/controller, le répertoire n'existe pas et est créé tout seul. Ajoutez le contenu suivant :

protected $socket = 'websocket://127.0.0.1:2346' où 127.0.0.1 est l'adresse IP du serveur socket. Écoutez ici le port 2346 de cette machine.

<?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) Exécutez à partir de la ligne de commande et démarrez le service d'écoute php server.php

f) Créez un nouveau fichier html à n'importe quel emplacement. Le contenu est :

<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) Enregistrez-le et ouvrez-le avec un navigateur, vous pouvez voir que le lien est réussi.

Installation de la version Linux

a) Exécutez simplement la commande composer à l'étape b) de l'installation de la version Windows : composer require topthink/think-worker. Voilà, le reste des étapes reste inchangé.

Utilisation simple de 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);
    }
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer