wokerman随笔
- linux环境检查是否满足workerman要求:
curl -Ss http://www.workerman.net/check.php | php
workerman依赖扩展:pcntl扩展、posix扩展、Event扩展或libevent扩展。Event扩展能显著提高workerman在高并发连接时CPU利用率
workerman基于php命令行模式运行,因此workerman的启动与停止有以下方式:
---- 启动:- 以调试方式启动:php server.php start
- 以守护进程方式启动:php server.php start -d
---- 停止:php server.php stop
---- 重启:php server.php restart
---- 平滑重启:php server.php reload
---- 查看状态:php server.php status
---- 查看连接状态:php server.php connections不要使用exit、die出语句,这样会导致进程退出
引入文件建议使用require_once或include_once
长连接应用必须加 心跳,否则可能因为长时间不活跃而被路由节点防火墙断开
只有在on{...}回调中载入的文件平滑重启后才会自动更新,启动脚本中直接载入的文件或者写死的代码运行reload不会自动更新(比如在脚本中require_once或include_once的文件)
一般来说在Worker::runAll();调用前运行的代码都是在主进程运行的,onXXX回调运行的代码都属于子进程。注意写在Worker::runAll();后面的代码永远不会被执行。代码:
require_once __DIR__ . '/Workerman/Autoloader.php';
use Workerman\Worker;
// 运行在主进程
$tcp_worker = new Worker("tcp://0.0.0.0:2347");
// 赋值过程运行在主进程
$tcp_worker->onMessage = function($connection, $data)
{
// 这部分运行在子进程
$connection->send('hello ' . $data);
};
Worker::runAll();
- 不要在主进程中初始化数据库、memcache、redis等连接资源,要在onWorkerStart里面初始化连接资源
- worker进程的id编号范围是0~$worker->count-1,进程重启后id编号值不变
- $connections属性存储了当前进程的所有客户端连接对象,其结构为:
array(id=>connection, id=>connection, ...) ,可以通过$worker->connections[$id]获取connection对象,从而实现根据id向指定客户端推送消息 - stdoutFile属性用于将所有向终端的输出重定向到stdoutFile指定的文件。前提是以守护进程方式运行
- 在使用workerman开发中如果想记录业务日志,可以使用file_put_contents或error_log函数来实现
- onWorkerStart是在子进程启动时运行的,如果开启多个子进程($worker->count),则会运行$worker->count次
- onConnect事件仅代表客户端与workerman完成了Tcp三次握手,此时客户端还没发来任何数据,在此事件中只能通过**$worker->getRemoteIp()**来获取对方Ip,没有其他可以鉴别客户端的数据或者信息
- Worker::runAll()执行后将永久阻塞,也就是位于Worker::runAll()之后的代码将不会被执行
wokerman随笔的更多相关文章
- AI人工智能系列随笔
初探 AI人工智能系列随笔:syntaxnet 初探(1)
- 【置顶】CoreCLR系列随笔
CoreCLR配置系列 在Windows上编译和调试CoreCLR GC探索系列 C++随笔:.NET CoreCLR之GC探索(1) C++随笔:.NET CoreCLR之GC探索(2) C++随笔 ...
- C++随笔:.NET CoreCLR之GC探索(4)
今天继续来 带大家讲解CoreCLR之GC,首先我们继续看这个GCSample,这篇文章是上一篇文章的继续,如果有不清楚的,还请翻到我写的上一篇随笔.下面我们继续: // Initialize fre ...
- C++随笔:从Hello World 探秘CoreCLR的内部(1)
紧接着上次的问题,上次的问题其实很简单,就是HelloWorld.exe运行失败,而本文的目的,就是成功调试HelloWorld这个控制台应用程序. 通过我的寻找,其实是一个名为TryRun的文件出了 ...
- ASP.NET MVC 系列随笔汇总[未完待续……]
ASP.NET MVC 系列随笔汇总[未完待续……] 为了方便大家浏览所以整理一下,有的系列篇幅中不是很全面以后会慢慢的补全的. 学前篇之: ASP.NET MVC学前篇之扩展方法.链式编程 ASP. ...
- 使用Beautiful Soup编写一个爬虫 系列随笔汇总
这几篇博文只是为了记录学习Beautiful Soup的过程,不仅方便自己以后查看,也许能帮到同样在学习这个技术的朋友.通过学习Beautiful Soup基础知识 完成了一个简单的爬虫服务:从all ...
- 利用Python进行数据分析 基础系列随笔汇总
一共 15 篇随笔,主要是为了记录数据分析过程中的一些小 demo,分享给其他需要的网友,更为了方便以后自己查看,15 篇随笔,每篇内容基本都是以一句说明加一段代码的方式, 保持简单小巧,看起来也清晰 ...
- 《高性能javascript》 领悟随笔之-------DOM编程篇(二)
<高性能javascript> 领悟随笔之-------DOM编程篇二 序:在javaSctipt中,ECMASCRIPT规定了它的语法,BOM实现了页面与浏览器的交互,而DOM则承载着整 ...
- 《高性能javascript》 领悟随笔之-------DOM编程篇
<高性能javascript> 领悟随笔之-------DOM编程篇一 序:在javaSctipt中,ECMASCRIPT规定了它的语法,BOM实现了页面与浏览器的交互,而DOM则承载着整 ...
随机推荐
- Spring Web Flux 相关概念
Reactive Streams.Reactor 和 Web Flux 上面介绍了反应式编程的一些概念,以及 Reactor 和 Web Flux.可能读者看到这里有些乱.这里介绍一下三者的关系.其实 ...
- Java读取CSV数据并写入txt文件
读取CSV数据并写入txt文件 package com.vfsd; import java.io.BufferedWriter; import java.io.File; import java.io ...
- 如何利用maven将本地jar包引入到工程之中
1.在个人开发模式下,可以将jar包放入项目的lib目录中,在pom.xml中做如下配置: <dependencies> <dependency> <groupId> ...
- jzy3D从入门到弃坑_4尝试使用jzy3D1.0画图失败
jzy3D从入门到弃坑_4 尝试使用jzy3D1.0画图失败 觉得有用的话,欢迎一起讨论相互学习~Follow Me 记录一下使用jzy3D1.0失败 究其原因在于 本人才疏学浅,对于JAVA ope ...
- bootCDN引用的bootstrap前端框架套件和示例
这是bootCDN上引用的bootstrap前端框架套件,由多个框架组合而成,方便平时学习和测试使用.生产环境要仔细琢磨一下,不要用开发版,而要用生产版.bootCDN的地址是:https://www ...
- 《深入理解Linux内核》 读书笔记
深入理解Linux内核 读书笔记 一.概论 操作系统基本概念 多用户系统 允许多个用户登录系统,不同用户之间的有私有的空间 用户和组 每个用于属于一个组,组的权限和其他人的权限,和拥有者的权限不一样. ...
- Vmware解决虚拟机不能联网的问题
1. 设置为NAT模式 2. 启动win7的服务,命令窗口输入services.msc 回车 3. 修改Vmware的设置
- [转载]schtasks命令使用实例介绍
Schtasks /Query /s "XXX" /V /FO /CSV > XXX.csv 原文出处:http://www.dzwebs.net/2969.html sch ...
- 2019 CSP-J 游记(CQ LNBS考场 的退役之战)
T0.10 爆零之战 已经不是第一次参加NOIP了(哦,关于兔子也NOIP了) 这次比赛的话,感觉考场很温馨,键盘很舒适,老师很友善,下次还会来.(哦不,下次来不了了,即将提前退役[大雾]) 刚刚文化 ...
- Vim 入门
Vim 简介 打开 Vim的四种模式 一些命令 插入 移动 文件 编辑 环境设置 .vimrc 更多命令 环境设置 折叠 显示 Vim 简介 Vim 是字符模式下的一种文本编辑器,不需要图形界面,它是 ...