前言:
上手册以示尊重:https://www.kancloud.cn/walkor/gateway-worker/326138;
https://www.cnblogs.com/fuqiang88/p/5956363.html
先介绍下GarewayWorker吧,GarewayWorker是基于Workerman开发的一个框架。讲通俗就是用来长连接的。
那么又为什么要长连接呢?
通常来说客户端与服务端的联系就是请求响应。由客户端发起请求给服务端,然后在服务端接收请求并响应将资源发送给客户端,就结束了。那么如果想要通过服务端建立两个客户端之间的联系怎么办呢?
其实想想也不难,假设有客户端A和客户端B再加一个服务器。客户端A请求服务器说‘服务器大哥我请你帮我向客户端B带句话’,那么服务器接收客户端A的请求知道了这件事,那很简单啊!服务器就返回个响应给客户端A说‘行行行’,然后服务器在将消息发送给客户端B,这不就解决了嘛,皆大欢喜!满分!放礼炮!
然后,本质上服务器不能主动向客户端发消息啊!我们所知道的客户端和服务器之间的联系都是由客户端单方面发起的,客户端发送tcp连接,然后发起http请求,服务器只负责响应(好被动)。所以要实现客户端和服务器的全双工通信就要建立长连接。
GarewayWorker就是用来建立长连接的。(行吧,扯不下去了,毕竟是小白)。
内容:
- GatewayWorker
讲一下GatewayWorker的工作原理吧。GatewayWorker主要分为三个进程,Register、Gateway、BusinessWorker。Register进程主要负责调度其他另两个进程的注册。Gateway主要负责维持和客户端的连接,将客户端发送过来的请求转发给响应的BusinessWorker进行处理,并接收BusinessWorker处理完的数据将其发送给相应的客户端。BusinessWorker进程默认调用Events.php中的onConnect onMessage onClose处理业务逻辑。
我们运用此框架开发只要关注业务功能上如何实现就好了。所以我们先了解下框架的业务逻辑入口Event.php。首先来认识下里面的方法
-
- onWorkerStart 进程启动事件
- onConnect 连接事件(有客户端连接进来就触发)
- onMessage 消息事件(有客户端发送消息时触发)
- onClose 关闭连接事件
- onWorkerStop 进程退出事件
通过以上监听事件来拓展业务业务需求。我的小demo主要用到了连接事件和消息事件。
- WebSocket
WebSoket是一种网络通信协议,就像HTTP一样。
首先问个为什么出现!
大家都知道HTTP协议的特点,无状态、无连接、单向的应用层协议。采用了请求响应式模型。
WebSocket的出现就是为了结局HTTP的单向性。由于HTTP无法实现服务器向客户端主动的发送消息,所以之前的解决方式就是通过在客户端AJAX异步请求实现长轮询,就是隔一段时间就去请求服务器看是否有变动,这样就到时每次请求都得去建立连接(或者HTTP请求启用长连接,一直保持HTTP连接始终打开)。
所以WebSocket就出现了,WebSocket连接允许客户端和服务器之间进行全双工通信,以便任一方都可以通过建立连接将数据推送到另一方。
记录下在博文中看到的这一句
(基于多线程或多进程的服务器无法适用于 WebSockets,因为它旨在打开连接,尽可能快地处理请求,然后关闭连接。任何实际的 WebSockets 服务器端实现都需要一个异步服务器。)
- WebSocket客户端
在客户端,没有必要为 WebSockets 使用 JavaScript 库。实现 WebSockets 的 Web 浏览器将通过 WebSockets 对象公开所有必需的客户端功能(主要指支持 Html5 的浏览器)。
了解下WebSocket对象的相关事件
-
- Socket.onopen 连接时触发
- Socket.onmessage 收到服务端消息时触发
- Socket.onerror 通信发生错误时触发
- Socket.onclose 连接关闭时触发
有没有跟上面的GatewayWorker很像,通信上主要的事件无非就是连接关闭、接收消息嘛。
好了,知识点差不多就这样吧,感觉说的什么玩意儿。但是还是要开始说说我的demo开发了。
我是laravel + GatewayWorker开发的demo
用laravel用来处理逻辑,GatewayWorker主要负责维持客户端的长连接。
页面用layui前端框架(因为现公司用这个)
页面设计像命令行那样吧,迷之审美,上图
好吧!世仇!
原文地址:https://www.cnblogs.com/lsrd/p/10196500.html