前言:

    上手册以示尊重: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。首先来认识下里面的方法

    1. onWorkerStart   进程启动事件
    2. onConnect              连接事件(有客户端连接进来就触发)
    3. onMessage        消息事件(有客户端发送消息时触发)
    4. onClose                关闭连接事件
    5. onWorkerStop         进程退出事件

    通过以上监听事件来拓展业务业务需求。我的小demo主要用到了连接事件和消息事件。

  • WebSocket

    WebSoket是一种网络通信协议,就像HTTP一样。

    首先问个为什么出现!

    大家都知道HTTP协议的特点,无状态、无连接、单向的应用层协议。采用了请求响应式模型。

    WebSocket的出现就是为了结局HTTP的单向性。由于HTTP无法实现服务器向客户端主动的发送消息,所以之前的解决方式就是通过在客户端AJAX异步请求实现长轮询,就是隔一段时间就去请求服务器看是否有变动,这样就到时每次请求都得去建立连接(或者HTTP请求启用长连接,一直保持HTTP连接始终打开)。

    所以WebSocket就出现了,WebSocket连接允许客户端和服务器之间进行全双工通信,以便任一方都可以通过建立连接将数据推送到另一方。

    记录下在博文中看到的这一句

(基于多线程或多进程的服务器无法适用于 WebSockets,因为它旨在打开连接,尽可能快地处理请求,然后关闭连接。任何实际的 WebSockets 服务器端实现都需要一个异步服务器。)

  • WebSocket客户端

    在客户端,没有必要为 WebSockets 使用 JavaScript 库。实现 WebSockets 的 Web 浏览器将通过 WebSockets 对象公开所有必需的客户端功能(主要指支持 Html5 的浏览器)。

    了解下WebSocket对象的相关事件

    1. Socket.onopen     连接时触发
    2. Socket.onmessage    收到服务端消息时触发
    3. Socket.onerror      通信发生错误时触发
    4. Socket.onclose   连接关闭时触发

    有没有跟上面的GatewayWorker很像,通信上主要的事件无非就是连接关闭、接收消息嘛。


  好了,知识点差不多就这样吧,感觉说的什么玩意儿。但是还是要开始说说我的demo开发了。

    我是laravel + GatewayWorker开发的demo

    用laravel用来处理逻辑,GatewayWorker主要负责维持客户端的长连接。

    页面用layui前端框架(因为现公司用这个)

    页面设计像命令行那样吧,迷之审美,上图

    好吧!世仇!

    

       

使用GatewayWorker 开发个即时聊天demo的更多相关文章

  1. GatewayWorker + LayIM实现即时聊天

    一.程序目录结构 二.代码展示 附LayIM开发文档:https://www.layui.com/doc/modules/layim.html 1.前端代码 <!DOCTYPE html> ...

  2. 基于Nodejs开发的web即时聊天工具

    由于公司需要开发web即时聊天的功能,开始时我们主要的实施方法是用jquery的ajax定时(10秒)轮询向服务器请求,由于是轮询请求,对 服务器的压力比较大.我们网站上线的时间不长,访问量不是很大, ...

  3. 高仿QQ即时聊天软件开发系列之三登录窗口用户选择下拉框

    上一篇高仿QQ即时聊天软件开发系列之二登录窗口界面写了一个大概的布局和原理 这一篇详细说下拉框的实现原理 先上最终效果图 一开始其实只是想给下拉框加一个placeholder效果,让下拉框在未选择未输 ...

  4. 高仿QQ即时聊天软件开发系列之二登录窗口界面

    继上一篇高仿QQ即时聊天软件开发系列之一开端之后,开始做登录窗口 废话不多说,先看效果,只有界面 可能还有一些细节地方没有做,例如那个LOGO嘛,不要在意这些细节 GIF虽短,可是这做起来真难,好吧因 ...

  5. iOS开发之微信聊天页面实现

    在上篇博客(iOS开发之微信聊天工具栏的封装)中对微信聊天页面下方的工具栏进行了封装,本篇博客中就使用之前封装的工具栏来进行聊天页面的编写.在聊天页面中主要用到了TableView的知识,还有如何在俩 ...

  6. 视频聊天 Demo

    ESFramework Demo -- 入门Demo,简单的即时通讯系统(附源码) 是基于ESFramework实现的一个简单的文字聊天demo,现在,我们将在这个demo的基础上,使用OMCS为其增 ...

  7. 即时聊天APP(一)

    最新写了一个即时聊天的安卓Demo,是基于Bmob后端开发的app,由于Bmob有较大局限性,因此,我并没有按照开发文档来进行开发,只是简单写了一个基本的文字聊天,以后有时间我会自己写一个带服务端的即 ...

  8. 天天玩微信,Spring Boot 开发私有即时通信系统了解一下

    1/ 概述 利用Spring Boot作为基础框架,Spring Security作为安全框架,WebSocket作为通信框架,实现点对点聊天和群聊天. 2/ 所需依赖 Spring Boot 版本 ...

  9. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

随机推荐

  1. 大数据入门第八天——MapReduce详解(四)本地模式运行与join实例

    一.本地模式调试MR程序 1.准备 参考之前随笔的windows开发说明处:http://www.cnblogs.com/jiangbei/p/8366238.html 2.流程 最重要的是设置Loc ...

  2. 20155327实验一 Java开发环境的熟悉

    20155327实验一 Java开发环境的熟悉 实验内容 1.使用JDK编译.运行简单的java程序 2.使用IDEA编辑.编译.运行.调试java程序 实验步骤 1.使用JDK编译.运行简单的jav ...

  3. OSG漫游到指定坐标点位置

    OSG中从当前场景位置漫游到指定点坐标位置,osg中场景的视口状态包括如下参数: 1.视点的位置 2.参考点的位置,该点通常为场景中的中心轴上的点 3.视点向上的方向向量 ( const osg::V ...

  4. BZOJ 2818 GCD 素数筛+欧拉函数+前缀和

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2818 题意:给定整数N,求1<=x,y<=n且Gcd(x,y)为素数的数对( ...

  5. ASP.NET Core Token认证

    翻译:Token Authentication in ASP.NET Core 令牌认证(Token Authentication)已经成为单页应用(SPA)和移动应用事实上的标准.即使是传统的B/S ...

  6. 【前端模板之路】一、重构的兄弟说:我才不想看你的代码!把HTML给我交出来!

    写在前面 随着前端领域的发展和社会化分工的需要,继前端攻城湿之后,又一重要岗位横空出世——重构攻城湿!所谓的重构攻城湿,他们的一大特点之一,就是精通CSS配置文件的编写...前端攻城湿跟重构攻城湿是一 ...

  7. nginx遇到的配置问题

    配置的例子如下: server { listen ; server_name localhost; #kzjtrans-web location /kzjtrans-web/ { proxy_pass ...

  8. 180804-Spring之动态注册bean

    Spring之动态注册bean 什么场景下,需要主动向Spring容器注册bean呢? 如我之前做个的一个支持扫表的基础平台,使用者只需要添加基础配置 + Groovy任务,就可以丢到这个平台上面来运 ...

  9. Jmeter+ant+jenkins接口自动化测试 平台搭建(二)

    一.依赖文件配置 1.在ant目录C:\apache-ant-1.10.5下新建一个demo文件夹,并将jmeter测试脚本放在该文件夹中 2.将\apache-jmeter-3.3\extras下面 ...

  10. Mysql试题集锦

    1.一张表,里面有 ID 自增主键,当 insert 了 17 条记录之后,删除了第 15,16,17 条记录,再把 Mysql 重启,再 insert 一条记录,这条记录的 ID 是 18 还是 1 ...