美文网首页
GatewayWorker 文档扫描

GatewayWorker 文档扫描

作者: 蛐蛐儿阳 | 来源:发表于2020-03-22 18:32 被阅读0次

    前言:今天不错,workerman文档扫了一遍,现在开始扫GatewayWorker,以下是网址,这篇文章是我的文档阅读笔记。
    http://doc2.workerman.net/
    扫了一遍没什么收获,有个疑问是默认为什么给开了三个进程,而且三个进程的协议都不一样,比如text,我并不需要这个协议。回来再研究一下吧,困了。
    发现GatewayWorker开了三个进程, 我估计我端口不够用,重新开一个。端口不能大于65535,

    docker run -itd -p 60001:60001 -p 60002:60002 -p 60003:60003 -p 60004:60004 -p 60005:60005 -v  /Users/guanliyang/php:/usr/share/nginx/html --name socken-php7.4 77cd7cd803b2
    

    一口气开了5个端口,够我霍霍的了。进入容器安装一个pcntl

    docker-php-ext-install pcntl
    

    也不用重启,测试下环境ok

    curl -Ss [http://www.workerman.net/check.php](https://links.jianshu.com/go?to=http%3A%2F%2Fwww.workerman.net%2Fcheck.php) | php
    

    ps命令常常用到,安装一下

    apt-get update #慢死了
    apt-get install -y procps #安装ps命令 慢
    apt-get install net-tools #安装下ifconfig命令
    

    由于mac ping 容器的 172.17.0.2 不同, ip写这个地址还是会报错。

    Error in v-on handler: "InvalidStateError: Failed to execute 'send' on 'WebSocket': Still in CONNECT
    

    前端new socket并不报错,发送信息报错,ping不同,信息发送不出去。老老实实改了我映射的端口60001

    我几乎什么都没做,start_gateway.php 里面稍微改下。

    <?php 
    /**
     * This file is part of workerman.
     *
     * Licensed under The MIT License
     * For full copyright and license information, please see the MIT-LICENSE.txt
     * Redistributions of files must retain the above copyright notice.
     *
     * @author walkor<walkor@workerman.net>
     * @copyright walkor<walkor@workerman.net>
     * @link http://www.workerman.net/
     * @license http://www.opensource.org/licenses/mit-license.php MIT License
     */
    use \Workerman\Worker;
    use \Workerman\WebServer;
    use \GatewayWorker\Gateway;
    use \GatewayWorker\BusinessWorker;
    use \Workerman\Autoloader;
    
    // 自动加载类
    require_once __DIR__ . '/../../vendor/autoload.php';
    
    // gateway 进程,这里使用Text协议,可以用telnet测试
    //$gateway = new Gateway("tcp://0.0.0.0:8282");
    $gateway = new Gateway("websocket://0.0.0.0:60002");
    
    // gateway名称,status方便查看
    $gateway->name = 'YourAppGateway';
    // gateway进程数
    //$gateway->count = 4;
    $gateway->count = 1;
    // 本机ip,分布式部署时使用内网ip
    $gateway->lanIp = '127.0.0.1';
    // 内部通讯起始端口,假如$gateway->count=4,起始端口为4000
    // 则一般会使用4000 4001 4002 4003 4个端口作为内部通讯端口 
    $gateway->startPort = 2900;
    // 服务注册地址
    $gateway->registerAddress = '127.0.0.1:1238';
    
    // 心跳间隔
    //$gateway->pingInterval = 10;
    // 心跳数据
    //$gateway->pingData = '{"type":"ping"}';
    
    /* 
    // 当客户端连接上来时,设置连接的onWebSocketConnect,即在websocket握手时的回调
    $gateway->onConnect = function($connection)
    {
        $connection->onWebSocketConnect = function($connection , $http_header)
        {
            // 可以在这里判断连接来源是否合法,不合法就关掉连接
            // $_SERVER['HTTP_ORIGIN']标识来自哪个站点的页面发起的websocket链接
            if($_SERVER['HTTP_ORIGIN'] != 'http://kedou.workerman.net')
            {
                $connection->close();
            }
            // onWebSocketConnect 里面$_GET $_SERVER是可用的
            // var_dump($_GET, $_SERVER);
        };
    }; 
    */
    
    // 如果不是在根目录启动,则运行runAll方法
    if(!defined('GLOBAL_START'))
    {
        Worker::runAll();
    }
    

    端口改下,进程改成1.
    html代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <script src="js/vue.js"></script>
    
    <body>
    <div id="app">
        <li v-for="message in get_message">
          {{ message }}
        </li>
      </ol>
    <input type="text" v-model="send_message">
    <input type="button" @click="log" value="发送"/>
    </div>
    <script>
    
    new Vue({
        el: '#app',
        data () {
            return {
                send_message: '',
                get_message : [],
                socket:"",
                path:"ws://127.0.0.1:60002",
            }
        },
        mounted () {
            // 初始化
            this.init()
        },
        methods: {
        init: function () {
                if(typeof(WebSocket) === "undefined"){
                    alert("您的浏览器不支持socket")
                }else{
                    // 实例化socket
                    this.socket = new WebSocket(this.path)
                    // 监听socket连接
                    this.socket.onopen = this.open
                    // 监听socket错误信息
                    this.socket.onerror = this.error
                    // 监听socket消息
                    this.socket.onmessage = this.getMessage
                }
            },
        log:function(event) {
            this.socket.send(this.send_message);
        },
    
        getMessage: function (msg) {
            //this.get_message = msg.data
            this.get_message.push(msg.data)
        },
        }
    });
    </script>
    </body>
    </html>
    
    

    还是上次的代码,发现走的就是event.php里面的东西。
    也就是说聊天的话,直接编写event就可以了。

    相关文章

      网友评论

          本文标题:GatewayWorker 文档扫描

          本文链接:https://www.haomeiwen.com/subject/rvmvyhtx.html