Worker是WorkerMan中最基本容器,Worker能够开启多个进程监听端口并使用特定协议通信,相似nginx监听某个端口。每一个Worker进程独立运做,采用Epoll(须要装event扩展)+非阻塞IO,每一个Worker进程都能上万的客户端链接,并处理这些链接上发来的数据。主进程为了保持稳定性,只负责监控子进程,不负责接收数据也不作任何业务逻辑。html
请看下图:nginx
今后图中咱们我能够清晰的看到,不一样的worker进程都负责着必定数量的客户端链接,彼此之间互不干扰。每一个worker进程的运行状况都受到master进程(主进程)的监控。web
从这张图中咱们我能够看到,图1中的全部worker进程都被放在worker进程池中统一管理,而主进程的工做就是监视这片worker进程池。浏览器
PS.下面介绍一下手册上关于开发必须知道的几个问题:websocket
1.workerman是经过命令行启动的:通常网页空间没法使用workerman。socket
2.客户端和服务端协议必定要对应才能通信:以websocket为例,客户端和服务端必须同时遵照websocket协议才能完成通信。另外须要注意:不要尝试在浏览器地址栏访问websocket协议端口,不要尝试用webscoket协议访问裸tcp协议端口,协议必定要对应。所以能够考虑经过html页面的js来测试websocket协议端口,下面贴上一段我本身的测试代码: tcp
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<script>
function connect(){
// 假设服务端ip为127.0.0.1,端口为2121
var ws = new WebSocket("ws://127.0.0.1:2121");
ws.onopen = function() {
alert("链接成功");
ws.send('tom');
};
ws.onmessage = function(e) {
alert("收到服务端的消息:" + e.data);
};
}
</script>
<body>
<button id="test" onclick="connect()">请单击</button>
</body>
</html>测试
3.长链接必须加心跳:先来区分一下长链接和短链接,长链接也叫持久链接,在TCP层握手成功后,不当即断开链接,并在此链接的基础上进行屡次消息(包括心跳)交互,直至链接的任意一方(客户端OR服务端)主动断开链接,此过程称为一次完整的长链接。短链接,顾名思义,与长链接的区别就是,客户端收到服务端的响应后,马上发送FIN消息,主动释放链接。也有服务端主动断连的状况,凡是在一次消息交互(发请求-收响应)以后马上断开链接的状况都称为短链接。由于长链接的保持会消耗系统资源,因此长时间未通信的长链接会被某些节点的防火墙关闭而强行断开。手册上关于心跳的介绍以下: spa
心跳做用主要有两个:命令行
一、客户端定时给服务端发送点数据,防止链接因为长时间没有通信而被某些节点的防火墙关闭致使链接断开的状况。
二、服务端能够经过心跳来判断客户端是否在线,若是客户端在规定时间内没有发来任何数据,就认为客户端下线。这样能够检测到客户端因为极端状况(断电、断网等)下线的事件。
建议值:
建议心跳间隔小于60秒
4.不要使用exit die语句,不然进程会退出。固然,进程退出了会马上重启一个新的进程继续服务。若是须要返回,能够调用return。