> PHP 프레임워크 > Workerman > TP5가 WorkerMan과 GatewayWorker를 통합하는 방법

TP5가 WorkerMan과 GatewayWorker를 통합하는 방법

藏色散人
풀어 주다: 2019-12-03 16:09:41
앞으로
3273명이 탐색했습니다.

아래 workerman 튜토리얼 칼럼에서는 TP5를 WorkerMan 및 GatewayWorker와 통합하는 방법을 소개하겠습니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!

TP5가 WorkerMan과 GatewayWorker를 통합하는 방법

TP5는 GatewayWorker를 통합합니다

Windows 버전 설치

a) Composer create-project topthink/think testTG를 사용하여 thinkphp5를 설치합니다.

b) thinkphp5 디렉토리를 입력합니다. 여기는 testTG이고, 작곡가를 사용합니다. requireworkerman/gateway-worker-for-win은 Windows 버전의 게이트웨이를 설치합니다.

c) 공식 웹사이트로 이동하여 데모가 포함된 Windows 버전의 Gateway-Worker를 다운로드하세요. http://www.workerman.net/download

d) 다운로드한 압축 패키지의 압축을 풀고 응용 프로그램/Yourapp의 모든 파일을 push here라는 이름의 thinkphp5 디렉토리 응용 프로그램의 폴더에 복사합니다.

e) 압축을 푼 폴더의 start_for_win.bat를 app과 같은 레벨의 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) thinkphp5를 설치하려면 Composer create-project topthink/think testTG를 사용하세요.

b) thinkphp5 디렉터리로 들어가세요. 여기는 testTG입니다. 버전 게이트웨이.

c) 공식 웹사이트로 이동하여 데모가 포함된 Linux 버전의 Gateway-Worker를 다운로드하세요. http://www.workerman.net/download

d) 다운로드한 압축 패키지의 압축을 풀고 응용 프로그램/Yourapp의 모든 파일을 push here라는 이름의 thinkphp5 디렉토리 응용 프로그램의 폴더에 복사합니다.

e) 압축을 푼 폴더의 start.php를 애플리케이션과 같은 레벨의 디렉토리인 thinkphp5의 루트 디렉토리에 복사합니다.

f) start.php 파일의 마지막 부분에 있는 forearch 루프 괄호 안의 경로를 올바른 경로로 변경하세요.

명령줄 php start.php start에서 시작하세요.

TP5 통합WrokerMan

Windows 버전 설치

a) thinkphp5를 설치하려면 작곡가 create-project topthink/think testTW를 사용하세요.

b) thinkphp5 루트 디렉터리인 testTW를 입력하세요. 먼저 Composer를 사용하면 topthink/think-worker가 필요하고, 그런 다음 Composer를 사용하면 Workerman/workerman-for-win을 사용하여 Workererman을 설치합니다. 성공적으로 설치되면 Vendorworkermanworkerman을 삭제합니다.

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)단계에서 작곡가 명령을 실행하면 됩니다. 작곡가에는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:segmentfault.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿