getwayWorker集群部署(二)

上一篇文章讲了关于单服务器如何接入workerman,实现通过服务器端主动推送数据给客户端。
这篇文章讲如何实现服务器集群的情况如何针对workerman做分布式的集群部署。
由于我们公司的线上项目的服务环境是多服务器搭建起来的服务器集群,因此需要解决的是如何能将workerman做集群化的部署,客户端访问任何集群中的任何一台服务器都能知道其身份,服务端做出正确响应。
例:IM功能中的A用户发消息给B用户,A发送消息先到集群中的任意一台服务器,服务器获知消息后,将信息推送给B用户。
切入正题:
我这里使用两台服务器做getwayWorker集群化的部署
IP: 49.233.150.121(公)| 172.21.0.1(内) (主)服务器
IP: 49.232.150.124(公)| 172.21.0.2(内) (从)服务器
1.环境搭建
进入到项目的根目录,使用composer进行安装
workerman与getway安装—
composer require workerman/workerman
composer require workerman/gateway-worker

2.服务器
修改YourApp中的配置文件,YourApp名称可以自定义,如果是windows系统的服务器,修改名称后,必须要更改start_for_win.bat文件中的名称。因为这个启动该服务的时候需要通过点击该文件来运行。
主服务器:

~~start_reigster.php文件~~ 
<?php 
use \Workerman\Worker;
use \GatewayWorker\Register;

// 自动加载类
//require_once __DIR__ . '/../../../vendor/autoload.php';

// register 必须是text协议
$register = new Register('text://0.0.0.0:1238');

// 如果不是在根目录启动,则运行runAll方法
if(!defined('GLOBAL_START'))
{
   
    Worker::runAll();
}

~~start_getway.php文件~~ 
<?php 
use \Workerman\Worker;
use \GatewayWorker\Gateway;
use \Workerman\Autoloader;
//require_once __DIR__ . '/../../../vendor/autoload.php';
// 自动加载类
$context = array(
    'ssl' => array(
        'local_cert'  => 'xxx.crt',  //或者crt文件
        'local_pk'    => 'xxx.key',
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
);
// gateway  进程,这里使用Text协议,可以用telnet测试
$gateway = new Gateway("websocket://0.0.0.0:8000", $context);
$gateway->transport = 'ssl';
// gateway名称,status方便查看
$gateway->name = 'getwayWorker';
// gateway进程数
$gateway->count = 4;
// 本机ip,分布式部署时使用内网ip
$gateway->lanIp = '172.21.0.1';
// 内部通讯起始端口,假如$gateway->count=4,起始端口为4000
// 则一般会使用4000 4001 4002 4003 4个端口作为内部通讯端口 
$gateway->startPort = 4000;
// 服务注册地址
$gateway->registerAddress = '172.21.0.1:1238';
// 心跳间隔
$gateway->pingInterval = 60;
// 心跳数据
$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')
        {
            $co
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值