workman安装:

环境安装:

检测依赖环境是否安装 rpm -qa | grep “软件或者包的名字”或者 yum list installed

eg:
rpm -qa | grep libevent-devel

必须扩展:pcntl(pcntl扩展可以支持php的多线程操作(仅限linux系统))、posix

可选扩展:event(php7)或者 libevent(php5) 选其中一个  且这两个扩展依赖libevent-devel扩展

一键环境全装:

#此步骤包含了安装php-cli主程序以及pcntl、posix、libevent库及git程序
yum install php-cli php-process git gcc php-devel php-pear libevent-devel -y

单独安装:

检测:扩展是否安装:curl -Ss http://www.workerman.net/check.php | php

#省略安装 pcntl、posix 的步骤
#安装event扩展的依赖库
yum install libevent-devel -y
#下载并安装event扩展
wget http://pecl.php.net/get/event-2.5.3.tgz
tar -zxvf event-2.5..tgz
cd event-2.5.
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install
#全路径 /usr/local/php/lib/php/extensions/no-debug-non-zts-20180731/event.so
#php.ini中启用event扩展(下面路径不对的话换成上面的全路径)
echo extension=event.so > /usr/local/php/etc/php.ini

环境安装完毕,接下来安装workerman框架:

git clone https://github.com/walkor/Workerman
或者直接将文件拷贝到你想要的位置

基于php多进程以及libevent事件轮询库。不依赖php-fpm、nginx或者apache等这些容器便可以独立运行

Windows 将workerman下载下来当做vendor第三方插件一样直接使用

<本机ip>可以为0.0.0.0表示监听本机所有网卡,包括内网ip和外网ip及本地回环127.0.0.1

<本机ip>如果以为127.0.0.1表示监听本地回环,只能本机访问,外部无法访问

<本机ip>如果为内网ip,类似192.168.xx.xx,表示只监听内网ip,则外网用户无法访问

<本机ip>设置的值不属于本机ip则无法执行监听,并且提示Cannot assign requested address错误

注意:www/test 对应的是 www.demo.com  它的hosts设置的ip为127.0.0.1(监听本地回环)

例子1:http服务:www/test/httpServer.php

<?php
use Workerman\Worker;
require_once dirname(__FILE__).'/vendor/Workerman/Autoloader.php'; // 创建一个Worker监听2345端口,使用http协议通讯
$http_worker = new Worker("http://www.demo.com:2345"); // 启动4个进程对外提供服务
$http_worker->count = 4; // 接收到浏览器发送的数据时回复hello world给浏览器
$http_worker->onMessage = function($connection, $data)
{
// 向浏览器发送hello world
$connection->send('hello world');
};
Worker::runAll();

打开终端 键入文件所在目录 输入 php httpServer.php start -d    回车就建立http服务器了(无需开启apache或者nginx)   注意修改了这些服务器文件必须 php httpServer.php restart

浏览器访问www.demo.com:2345 或者127.0.0.1:2345   (浏览器显示hello world)

websocket:www/test/websocketServer.php

<?php
use Workerman\Worker;
require_once dirname(__FILE__).'/vendor/Workerman/Autoloader.php'; // 创建一个Worker监听2345端口,使用http协议通讯
$ws_worker = new Worker("websocket://0.0.0.0:2222"); // 启动4个进程对外提供服务
$ws_worker->count = 4; // 接收到浏览器发送的数据时回复hello加上浏览器发送的数据拼接一起发送给浏览器
$ws_worker->onMessage = function($connection, $data)
{
// 向浏览器发送hello world
$connection->send('hello'.$data);
}; Worker::runAll();

打开终端 键入文件所在目录 输入 php websocketServer.php start -d    回车就建立http服务器了(无需开启apache或者nginx)   注意修改了这些服务器文件必须 php httpServer.php restart

websoket页 index.php  :怎么访问他呢打开apache:访问www.demo.com:80

<html>
<head></head>
<body>
<script type="text/javascript">
var ws = new WebSocket("ws://www.demo.com:2222");//连接127.0.0.1:222
ws.onopen=function(){
ws.send('world');
}
ws.onmessage=function(e){
console.log(e.data);//helloworld
}
</script>
</body
</html>

<本机ip>可以为0.0.0.0表示监听本机所有网卡,包括内网ip和外网ip及本地回环127.0.0.1

<本机ip>如果以为127.0.0.1表示监听本地回环,只能本机访问,外部无法访问

<本机ip>如果为内网ip,类似192.168.xx.xx,表示只监听内网ip,则外网用户无法访问

<本机ip>设置的值不属于本机ip则无法执行监听,并且提示Cannot assign requested address错误

使用Worker::$pidFile = '/var/run/workerman.pid';改变位置时,当他所在服务器启后,然后注释它之后在终端是杀不掉的,因为找不到pid路径了

所以要先杀掉它启动的服务然后在干别的哦

Worker:onError()由以下几种结果触发

mysql代理: 实现 mysql -h127.0.0.1 -P4406 -uroot -p 连接到端口为3306的mysql

凹

自定义协议

协议交互流程

1客户端发送写个数据包给服务端,服务端收到数据调用协议的input方法返回长度值$length给workerman框架

2得到这个$length值后就会冲反冲区截取出$length长度的数据(即分包)并调用协议的decode方法解包,解包后的数据为$data

3解包后的workerman将数据$data以回调onMesage($connection,$data)的形式传递给业务

4.服务端给客户端发送数据时, workerman会自动利用协议的encode方法将$buffer打包后发送给客户端

yum install php-cli php-process git gcc php-devel php-pear libevent-devel -y

基于workerman的GatewayWorker框架

下载:

composer require workerman/gateway-woker
或者
git clone https://github.com/walkor/GatewayWorker

工作原理

分布式部署

创建wss服务(与https一样 参考)



workman的更多相关文章

  1. php 多进程workman服务器框架

    今天搜php socket,发现了一个给力的php写socket的框架workman,有机会要用用. 好给力,原来那个小蝌蚪聊天室就是用这个开发的. 仿佛发现了新大陆.

  2. PHP workMan webSocket 转发器

    PHP WorkerMan webSocket 功能演示===================================== 基本功能:实现页面websocket之间互相通讯 start_deb ...

  3. workman的学习总结

    我们知道php主要是用来做web应用的,而且平时使用的都是都是和其他的web服务器来结合使用,比如和apache,nginx和apache的时候,是作为apache的一个动态模块来加载,和nginx的 ...

  4. Ubuntu 切换键盘布局(colemak / workman / norman)

    首先找出所有可选的布局(layout)方案: $ man xkeyboard-config 可以看到 us 下有很多常见的布局方案(以下为节选): LAYOUTS ┌───────────────── ...

  5. 如何使用 Workman 做一个聊天室

    一:首先,得简单说说 thinkphp+workerman 的安装. 安装 thinkphp5.1 composer create-project topthink/think=5.1.x-dev t ...

  6. workman源代码阅读 - 使用信号处理器实现定时器

    <?php /** * SIGALRM信号处理器注册成功后,在什么情况下进程会收到该信号呢? * * 在Linux系统下,每个进程都有惟一的一个定时器,该定时器提供了以秒为单位的定时功能.在定时 ...

  7. 笔记:Linux(AWS Redhat)开机启动workman进程(/etc/rc.local必须是755权限)

    1.使用which命令查看php的安装路径 [root@ip---- ~]# which php /usr/bin/php 2.使用vim /etc/rc.local将要执行的命令加入/etc/rc. ...

  8. workman项目设置开机自启动

    https://blog.csdn.net/xxq929604980/article/details/78558317 http://man.linuxde.net/chkconfig 1.脚本编写 ...

  9. Workman启动失败的解决方法 stream_socket_server() has been disabled for security reasons

    1.报如下错误,问题是php版本太低 php -ini 看下你的版本 http://doc2.workerman.net/how-distributed.html 参考: https://blog.c ...

随机推荐

  1. mysql架构精选

    ◆主从架构1.安装服务(主从) yum -y install mysql* /etc/init.d/mysqld start2.修改配置文件:/etc/my.conf(主从) vi /etc/my.c ...

  2. 微信小程序生命周期、页面生命周期、组件生命周期

    1. 生命周期 App(全局) 位置:项目根目录app.js文件 App({ onLaunch (options) { // console.log('小程序初始化') }, onShow(optio ...

  3. 微信小程序app.json文件常用全局配置

    小程序根目录下的 app.json 文件用来对微信小程序进行全局配置,决定页面文件的路径.窗口表现.设置网络超时时间.设置多 tab 等. JOSN文件不允许注释,下面为了学习加上注释,粘贴需要的片段 ...

  4. Android 5.1 预制输入法

    Android修改默认输入法为讯飞方法如下: 首先将讯飞输入法apk预制到系统app中: 在firefly-rk3288_android5.1_git_20180126/out/target/prod ...

  5. codeforces1156D 0-1-Tree 换根dp

    题目传送门 题意: 给定一棵n个点的边权为0或1的树,一条合法的路径(x,y)(x≠y)满足,从x走到y,一旦经过边权为1的边,就不能再经过边权为0的边,求有多少边满足条件? 思路: 首先,这道题也可 ...

  6. ubuntu:beyond compare 4 This license key has been revoked 解决办法

    错误如图所示: 解决办法: (1)先用find命令找到bcompare所在位置:sudo find /home/ -name '*bcompare' ()进入 /home/whf/.config,删除 ...

  7. Eclipse导入的Maven项目没有Build Path

    我导入的是 Signal-Server项目到 Eclipse中,发现 src 文件夹上面没有#号,包视图和语法提示都没有 ~~ 解决方法: 修改 Project Facets 在 项目右键 -> ...

  8. idea激活教程,最新!!!

    1.下载破解补丁(关键). 破解补丁:JetbrainsIdesCrack-4.2-release.jar百度云地址:https://pan.baidu.com/s/18ovphd7sm7oYXQb4 ...

  9. python 对redis 键值对的操作

    我们可以将Redis中的Hashes类型看成具有String Key和String Value的键值对容器.类似python中的dict,javascript的jaon,java 的map,每一个Ha ...

  10. Dubbo---Multicast 注册中心---xml配置

    1.项目结构(maven项目) 2.dubbotest.pom <?xml version="1.0" encoding="UTF-8"?> < ...