TP5整合 WorkerMan 以及 GatewayWorker

摘要:
c) 到官方网站下载Windows版本的gateway worker,其中有一个演示。f) 右键单击start_ for _ win。单击Edit将目录更改为您自己的目录,该目录更改为phpapplicationpushstart_register。phpapplicationpushstart_网关。phpapplicationpushstart_业务工作者。phpPauseg)保存并退出。http://www.workerman.net/downloadd)解压缩下载的压缩包,并将Applications/Yourap中的所有文件复制到thinkphp5目录应用程序中名为push here的任何文件夹中。TP5集成了WrokerMan Windows版本安装a)使用composecreate projecttopthink/thinktestTW安装thinkphp5.b)输入thinkphp5根目录,即testTW。首先使用composerequirestothink/hint-worker,然后使用composeRequiretorman/worker for win安装worker。安装成功后删除vendorworkermanworkerman。在application/push/controller中,目录不存在,而是自己创建的。对于Linux安装,a)只需执行Windows安装步骤b)中的composer命令:composerrequiretopthink/hint-worker。

TP5整合GatewayWorker

Windows版安装
a)使用composer create-project topthink/think testTG,来安装thinkphp5.
b)进入thinkphp5的目录,此处为testTG,使用composer require workerman/gateway-worker-for-win 安装Windows版本的gateway。
c)去官网下载Windows版的gateway-worker,里面有demo。http://www.workerman.net/download
d)将下载的压缩包解压,将Applications/Yourapp中的文件全部复制到thinkphp5目录application里面的任意文件夹,这里取名为push。
e)将解压后的文件夹中的start_for_win.bat复制到thinkphp5的根目录,即与application同级的目录。
f)右键start_for_win.bat,点编辑,将里面的目录改成自己的目录,这里改为
php applicationpushstart_register.php applicationpushstart_gateway.php applicationpushstart_businessworker.php
Pause
g)保存退出。双击运行。
Linux版安装
a)使用composer create-project topthink/think testTG,来安装thinkphp5.
b)进入thinkphp5的目录,此处为testTG,使用composer require workerman/gateway-worker 安装Linux版本的gateway。
c)去官网下载Linux版的gateway-worker,里面有demo。http://www.workerman.net/download
d)将下载的压缩包解压,将Applications/Yourapp中的文件全部复制到thinkphp5目录application里面的任意文件夹,这里取名为push。
e)将解压后的文件夹中的start.php复制到thinkphp5的根目录,即与application同级的目录。
f)将start.php文件中最后部分forearch循环括号内的路径改为自己的正确路径。
在命令行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 workerman/workerman-for-win,来安装workerman。安装成功之后删除vendorworkermanworkerman。
c)在thinkphp5根目录(即与application同级目录)创建server.php,编辑一下内容。
<?php
efine('APP_PATH', __DIR__ . '/application/');
define('BIND_MODULE','push/Worker');
// 加载框架引导文件
require __DIR__ . '/thinkphp/start.php';
d)创建workerman的controller,命名为Worker.php。在application/push/controller,目录不存在自行创建。添加以下内容:
protected $socket = 'websocket://127.0.0.1:2346'其中127.0.0.1为socket服务器所在的ip地址。此处监听本机的2346端口。
<?php

namespace apppushcontroller;

use thinkworkerServer;

class Worker extends Server
{
    protected $socket = 'websocket://127.0.0.1:2346';

    /**
     * 收到信息
     * @param $connection
     * @param $data
     */
    public function onMessage($connection, $data)
    {
        $connection->send('我收到你的信息了');
    }

    /**
     * 当连接建立时触发的回调函数
     * @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
";
    }

    /**
     * 每个进程启动
     * @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('tom');
    alert("给服务端发送一个字符串:tom");
};
ws.onmessage = function(e) {
    alert("收到服务端的消息:" + e.data);
};
</script>
g)保存,用浏览器打开,就可以看到链接成功。
Linux版安装
a)只需将Windows版安装的b)步骤中的composer命令只执行:composer require topthink/think-worker。即可,其余步骤不变。

注意事项:

启动监听时如果报错 没有该模块,可能是路由配置了 '/' => [...] ,去掉就可以; 

每次重新配置了Worker.php,都有重新启动监听;

线上模式:配置Worder.php的 $socket 需要是 "阿里云私有ip:端口号";安全规则开放端口号

简单使用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('push/BindClientId')}";
    var data = e.data;

    var type = data.type || '';
    switch(type){
        // Events.php中返回的init类型的消息,将client_id发给后台进行uid绑定
        case 'init':
            // 利用jquery发起ajax请求,将client_id发给后端进行uid绑定
            $.post(bindUrl, {client_id: data.client_id}, function(data){

            }, 'json');
            break;
        // 当mvc框架调用GatewayClient发消息时直接alert出来
        default :
        var text = e.data;
            var str = '<li style="100%; height:60px; border:1px solid #000">' +text +'</li>';
            $('#message_box').append();
           // alert(e.data);
    }
};
</script>
class Push{
   
    public function helloAction () {
        $uid = $_GET['uid'];
        session('uid', $uid);

        $view = new View;
        return $view->fetch();
    }

    public function BindClientIdAction () {
        
        $client_id = $_POST['client_id'];
        // 设置GatewayWorker服务的Register服务ip和端口,请根据实际情况改成实际值
        Gateway::$registerAddress = '127.0.0.1:1238';

        $bindUid = session('uid');
        // 假设用户已经登录,用户uid和群组id在session中
        // client_id与uid绑定
        Gateway::bindUid($client_id, $bindUid);
        // 加入某个群组(可调用多次加入多个群组)
        // Gateway::joinGroup($client_id, $group_id);
    }

    public function AjaxSendMessageAction () {
        $message = $_POST['message'];
        // 设置GatewayWorker服务的Register服务ip和端口,请根据实际情况改成实际值
        Gateway::$registerAddress = '127.0.0.1:1238';

        GateWay::sendToAll($message);
    }
}

原文: https://www.cnblogs.com/wt645631686/p/7219519.html

免责声明:文章转载自《TP5整合 WorkerMan 以及 GatewayWorker》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇数据类型后面加问号是什么意思?Git 常用命令 连接GitHub下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用springcloud gateway搭建网关(分流,限流,熔断)

Spring Cloud Gateway Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。 Spring Cloud Gatewa...

第五章 Gateway--服务网关

欧克 ,我接着上篇第四章 Sentinel–服务容错,继续写下去 开始网关之旅 5.1网关简介 大家都都知道在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去用。 这样的架构,会存在着诸多的问题: 客户端多次请求不同的微服务,增加客户端代码...

SpringCloud Alibaba实战 -引入服务网关Gateway

https://www.cnblogs.com/three-fighter/p/14971538.html http://javadaily.cn/articles/2020/01/16/1579160378591.html SpringCloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通...

支付网关集成(转自Best Payment Gateways)

如果你要在你的电子商务网站上接受信用卡付款,你需要一个支付网关.本篇文章解释了做支付网关集成需要你做什么,如何找一个程序员去做这件事,还介绍了当下流行的支付网关. 如果你打算做电子商务,首要的事情就是你需要一个支付网关.支付网关是一个应用程序,在上面你可以通过互联网处理你的交易.如果你要在因特网上买一些商品或者一些服务,你需要支付网关帮助你与你的客户和金融...

Gateway Redis令牌桶请求限流过滤器

spring cloud gateway默认基于redis令牌桶算法进行微服务的限流保护,采用RateLimter限流算法来实现。 1.引入依赖包 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spr...

网关服务Spring Cloud Gateway(二)

上一篇文章服务网关 Spring Cloud GateWay 初级篇,介绍了 Spring Cloud Gateway 的相关术语、技术原理,以及如何快速使用 Spring Cloud Gateway。这篇文章我们继续学习 Spring Cloud Gateway 的高级使用方式,比如如何配置服务中心来使用,如何使用熔断、限流等高级功能。 注册中心 上篇主要...