workerman_connection 测试WebStock 功能

Description

整理PHP 实现webstock 功能的相关流程。感谢workerman 开发作者提供开源组件。

安装 composer

# curl -sS https://getcomposer.org/installer | php

如果安装 composer 提示PHP 版本不够按照如下处理,否则跳过。

提示版本不够,现在是5.3.3 只好准备升级到5.6

先进行卸载旧版本。

# yum list installed | grep php

# yum remove php.x86_64 php-cli.x86_64 php-common.x86_64 php-fpm.x86_64 php-gd.x86_64 php-mbstring.x86_64 php-mcrypt.x86_64 php-mysql.x86_64 php-pdo.x86_64 php-xml.x86_64 删掉显示出来的所有组件

接下来安装PHP5.6

# rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm 升级一下yum 工具

# yum clean all 清除

# yum install php56w.x86_64 php56w-cli.x86_64 php56w-common.x86_64 php56w-fpm.x86_64 php56w-gd.x86_64 php56w-ldap.x86_64 php56w-mbstring.x86_64 php56w-mcrypt.x86_64 php56w-mysql.x86_64 php56w-pdo.x86_64 php56w-xml.x86_64

验证安装版本

# php -v (显示 5.6.35)

# /etc/init.d/php-fpm restart 重新启动

安装WebStock 所需要的组件

安装前检查很重要

# curl -Ss http://www.workerman.net/check.php|php 检查缺啥

PHP Version >= 5.3.3 [OK]

Extension pcntl check [OK]

Extension posix check [fail] (缺啥补啥)

补充缺少的部分

# yum install php56w-process 安装缺少的 posix

# mv composer.phar /usr/local/bin/composer 让命令全局调用

# cd (切换到项目目录)

安装:workerman

# composer require workerman/workerman

安装:gateway-worker

# composer require workerman/gateway-worker

代码测试

下载本项目的文件,这里假设你防止的目录是网站根目录下 ws 文件夹中。

配置

配置 ws/start_businessworker.php BusinessWorker类其实也是基于基础的Worker开发的。BusinessWorker是运行业务逻辑的进程,BusinessWorker收到Gateway转发来的事件及请求时会默认调用Events.php中的onConnect、onMessage、onClose方法处理事件及数据,开发者正是通过实现这些回调控制业务及流程。

$worker->name 是你的工作进程名称,随便起名即可别重名

$worker->registerAddress 是webstock 服务器的地址,目标指向你的webstock 服务器,这个在分布式处理需要注意,这里都在一台主机上测试,所以IP为127.0.0.1

其他不用改,不要动,保存退出

举例

use \Workerman\Worker;

use \Workerman\WebServer;

use \GatewayWorker\Gateway;

use \GatewayWorker\BusinessWorker;

use \Workerman\Autoloader;

// bussinessWorker 进程

$worker = new BusinessWorker();

// worker名称

$worker->name = 'YourAppBusinessWorker';

// bussinessWorker进程数量

$worker->count = 4;

// 服务注册地址

$worker->registerAddress = '127.0.0.1:2346';

// 如果不是在根目录启动,则运行runAll方法

if(!defined('GLOBAL_START')) {

Worker::runAll();

}

配置 ws/start_gateway.php Gateway类用于初始化Gateway进程。Gateway进程是暴露给客户端的让其连接的进程。所有客户端的请求都是由Gateway接收然后分发给BusinessWorker处理

$gateway->name

$gateway->count

$gateway->lanIp

$gateway->startPort

$gateway->registerAddress

$gateway->pingInterval

$gateway->pingData

直接看注释吧。

use \Workerman\Worker;

use \Workerman\WebServer;

use \GatewayWorker\Gateway;

use \GatewayWorker\BusinessWorker;

use \Workerman\Autoloader;

// gateway 进程,这里使用Text协议,可以用telnet测试

$gateway = new Gateway("websocket://0.0.0.0:2345");

// gateway名称,status方便查看

$gateway->name = 'YourAppGateway';

// gateway进程数

$gateway->count = 4;

// 本机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:2346';

// 心跳间隔

$gateway->pingInterval = 20;

// 心跳数据

$gateway->pingData = '{"type":"ping"}';

配置 ws/start_register.php Register类其实也是基于基础的Worker开发的。Gateway进程和BusinessWorker进程启动后分别向Register进程注册自己的通讯地址,Gateway进程和BusinessWorker通过Register进程得到通讯地址后,就可以建立起连接并通讯了。

要修改的只有text 协议地址,这里面要和

use \Workerman\Worker;

use \GatewayWorker\Register;

// register 服务必须是text协议

$register = new Register('text://0.0.0.0:2346');

// 如果不是在根目录启动,则运行runAll方法

if(!defined('GLOBAL_START')) {

Worker::runAll();

}

逻辑工作原理

1.Register、Gateway、BusinessWorker进程启动

2.Gateway、BusinessWorker进程启动后向Register服务进程发起长连接注册自己

3.Register服务收到Gateway的注册后,把所有Gateway的通讯地址保存在内存中

4.Register服务收到BusinessWorker的注册后,把内存中所有的Gateway的通讯地址发给BusinessWorker

5.BusinessWorker进程得到所有的Gateway内部通讯地址后尝试连接Gateway

6.如果运行过程中有新的Gateway服务注册到Register(一般是分布式部署加机器),则将新的Gateway内部通讯地址列表将广播给所有BusinessWorker,BusinessWorker收到后建立连接

7.如果有Gateway下线,则Register服务会收到通知,会将对应的内部通讯地址删除,然后广播新的内部通讯地址列表给所有BusinessWorker,BusinessWorker不再连接下线的Gateway

8.至此Gateway与BusinessWorker通过Register已经建立起长连接

9.客户端的事件及数据全部由Gateway转发给BusinessWorker处理,BusinessWorker默认调用Events.php中的onConnect onMessage onClose处理业务逻辑。

10.BusinessWorker的业务逻辑入口全部在Events.php中,包括onWorkerStart进程启动事件(进程事件)、onConnect连接事件(客户端事件)、onMessage消息事件(客户端事件)、onClose连接关闭事件(客户端事件)、onWorkerStop进程退出事件(进程事件)

执行测试

进入服务器的ws 目录下

php start.php start 这会启动所有服务

启动后截图

控制台截图

里面会生成一个假的OPEN-ID 这个OPEN-ID 用来沟通这个用户的客户端“OPENID_1539063500148”

查看客户端控制台

看到消息表示测试成功。

特别说明

send_message.php 中的代码实际上放到任何框架下都可以执行,这个完美的进行了解耦操作。

webstock php,workerman_connection相关推荐

  1. echart webstock vue实现实时心率图

    echart webstock vue实现实时心率图 echart webstock vue实现实时心率图 最近收到一个需求,需要做一个实时的心率图,于是就上网收集了一些资料,基于webstock 和 ...

  2. java webstock 在线直播_在线教育直播开发的这些知识你知道吗?

    线下教育在当代已经趋于落后了,随之而来的是大批的在线教育直播系统,许多大的互联网公司也想来分一杯羹,毕竟在线教育与线下教育相比,优势还是比较明显的,那么在线教育直播开发的相关知识您都知道多少呢? 1. ...

  3. 2007最优秀的CSS网站设计

    很多人不知道的是,我同样是 Best Web Gallery 和 N.Design Studio"背后"的人. 2006年,我创建了Best Web Gallery,作为我发现的最 ...

  4. cookie追加数据_集算器 SPL 抓取网页数据

    [摘要] 集算器 SPL 支持抓取网页数据,根据抓取定义规则,可将网页数据下载到在本地进行统计分析.具体定义规则要求.使用详细情况,请前往乾学院:集算器 SPL 抓取网页数据! 网站上的数据源是我们进 ...

  5. 股票K线5,15,30,60分钟数据接口

    1. 新浪接口 https://quotes.sina.cn/cn/api/json_v2.php/CN_MarketDataService.getKLineData?symbol=sh000300& ...

  6. surface usb启动_Surface Book 2开发人员印象和USB-C的魔力

    surface usb启动 I recently got a updated laptop for work, a 15" Surface Book 2. It's quickly beco ...

  7. 微信小程序中开发的小坑

    微信小程序中开发的小坑 本文随时更新微信小程序开发过程中遇到的小坑.现已收集如下. 微信小程序编译后的大小不能超过1MB. 微信小程序不能建立两个(含)以上的WebStock连接.

  8. php 股票数据 sina,腾讯股票接口、和讯网股票接口、新浪股票接口、雪球股票数据、网易股票数据...

    腾讯股票接口: 分时图 http://data.gtimg.cn/flashdata/hushen/minute/sz000001.js?maxage=110&0.28163905744440 ...

  9. 软件需求说明书(GB856T——88)基于协同的在线表格forture-sheet

    软件需求说明书的编写提示 1引言 1.1产品目的 制造一个功能丰富,配置简单的在线表格组件,开箱即用,产品对位所有办公用户,可以大量用户同时在线进行协同合作办公,可以大大的提高工作效率. 1.2产品范 ...

最新文章

  1. Centos7 Docker Jenkins ASP.NET Core 2.0 自动化发布和部署
  2. 利用耦合隐马尔可夫模型改进交易策略
  3. 【SRH】------常见的HTTP状态码
  4. 自定义函数变量的设置(*/**),lambda匿名函数(map/filter/zip/enumerate)
  5. ITK:提取二进制图像中斑点的内部和外部边界
  6. Gateway网关-网关作用介绍
  7. nfc uid几个字节有值为0的吗_字节小哥哥自述:从实习到转正的心路历程
  8. jedis jedispool Redistemplate
  9. 遍历数组长度_Java基础之数组
  10. simpy练习案例(二):小车运行与充电
  11. eclipse占用内存过大_Java内存泄漏分析工具Memory Analyzer Tool
  12. .net开发工程师是做什么的_.NET能开发出什么样的APP?盘点那些通过Smobiler开发的移动应用...
  13. MapGuide应用开发系列(八)----MapGuide Studio准备地图之地图(Map)
  14. Cause: java.sql.SQLException: Unknown initial character set index ‘255‘ received from server. Initia
  15. Java 11 升级:“债务”“危机”
  16. 源码安装MySQL5.5.20
  17. 通用数据接口USB3.0,雷电3,TypeC之间
  18. vscode C++配置opencv
  19. 达观数据:Tornado原理浅析及应用场景探讨
  20. ctf web 的一些writeup jwt以及黑客游戏

热门文章

  1. 怎么把word转换pdf,pdf转换word ,pdf转换成高清图片
  2. Pytorch的C++接口实践
  3. iframe懒加载_前端常见问题
  4. 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波2 - 图像反转、对数变换
  5. 失望时想起了你是什么歌_你是空你是空是什么歌 你是风你是风什么歌
  6. html meta页面自适应,【转载·收藏】 html5手机网站自适应需要加的meta标签
  7. Python基础:模块化来搭项目
  8. 抽屉之Tornado实战(5)--点赞与评论树
  9. bzoj2058: [Usaco2010 Nov]Cow Photographs(逆序对)
  10. Linux进程间通信(管道、消息队列、共享内存、信号、信号量)