美文网首页
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