使用GatewayWorker 开发个即时聊天demo

前言:

    上手册以示尊重: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前端框架(因为现公司用这个)

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

    好吧!世仇!

    

       

原文地址:https://www.cnblogs.com/lsrd/p/10196500.html

时间: 2024-10-10 17:43:37

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

android开发中即时聊天软件中时间的获得

` /** * 根据long类型的时间戳,转换为一个String类型的描述性时间 * 通话记录如果发生在今天:"15:30" * 发生在昨天:"昨天8:23" * 发生在前天:"前天4:56" * 更早: "2016/04/15" * @param timeStample * @return */ //timeStample是聊天记录发生的时间 public static String getTime(long timeSta

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

上一篇高仿QQ即时聊天软件开发系列之二登录窗口界面写了一个大概的布局和原理 这一篇详细说下拉框的实现原理 先上最终效果图 一开始其实只是想给下拉框加一个placeholder效果,让下拉框在未选择未输入时显示一个提示字符串.由于Background对ComboBox无效,所以直接通过Background来实现是不行了.需要重新写ComboBox的模板,也就是Template,自定义一个模板来实现这个结果.又看了一下QQ的下拉框,这玩意不自定义也难以实现,所以就干脆自定义了. 先上代码,先是Com

ios开发xmpp仿微信即时聊天工具

最近在做一个项目,需要一个即时聊天工具,先打算有第三方环信(http://www.easemob.com),但是最终老板不允许,要自己开发用自己的服务器,哎!如果有需要的可以去看看这个环信,真的不错.进入今天的主题,其实也是大神们开发的,我在这只是把一些细节理一下让大家你能少走一点弯路,需要的资料和源码这里面都有http://pan.baidu.com/s/1nt5esnn. 详细的介绍看这http://blog.csdn.net/kangx6/article/details/7740135,看

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

继上一篇高仿QQ即时聊天软件开发系列之一开端之后,开始做登录窗口 废话不多说,先看效果,只有界面 可能还有一些细节地方没有做,例如那个LOGO嘛,不要在意这些细节 GIF虽短,可是这做起来真难,好吧因为我没玩过WPF所以难,因为感觉做出来之后也就那样 整体布局 整体是上下分,下面是左中右分 1 <Grid> 2 <Grid.RowDefinitions> 3 <RowDefinition Height="27"><!--用于放窗口右上角关闭.最

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

1/ 概述 利用Spring Boot作为基础框架,Spring Security作为安全框架,WebSocket作为通信框架,实现点对点聊天和群聊天. 2/ 所需依赖 Spring Boot 版本 1.5.3,使用MongoDB存储数据(非必须),Maven依赖如下: <properties> <java.version>1.8</java.version> <thymeleaf.version>3.0.0.RELEASE</thymeleaf.ve

nodejs即时聊天

一直想做一个即时聊天的应用,前几天看到了socket.io,感觉还不错,自己略加修改,感觉挺不错的.官网上给的例子很简单,下面改进了一点,实现了历史消息的推送. demo地址:chat.androiddevelop.cn 其中服务器端代码: var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); var history = new Ar

Python之路,Day18 - 开发一个WEB聊天来撩妹吧

Python之路,Day18 - 开发一个WEB聊天来撩妹吧 本节内容: 项目实战:开发一个WEB聊天室 功能需求: 用户可以与好友一对一聊天 可以搜索.添加某人为好友 用户可以搜索和添加群 每个群有管理员可以审批用户的加群请求,群管理员可以用多个,群管理员可以删除.添加.禁言群友 可以与聊天室里的人进行临时会话(与qq群一样) 可以在群中发图片 可以与好友一对一发文件 知识必备: django html\css\js bootstrap jquery, ajax 前景介绍 首先我们知道http

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

在上篇博客(iOS开发之微信聊天工具栏的封装)中对微信聊天页面下方的工具栏进行了封装,本篇博客中就使用之前封装的工具栏来进行聊天页面的编写.在聊天页面中主要用到了TableView的知识,还有如何在俩天中显示我们发送的表情,具体请参考之前的博客:IOS开发之显示微博表情,在这儿就不做赘述啦.在聊天页面用到了三对,六种Cell,不过cell的复杂度要比之前的新浪微博(IOS开发之新浪围脖)简单的多.废话少说吧,还是先来几张效果图,在给出实现代码吧. 聊天界面的效果图如下:在下面的聊天界面中中用到了

tomcat websocket 实现网页在线即时聊天

背景介绍 近一个月完成了公司的一个项目,负责即时聊天部分 寻找了一下,决定使用websocket,要问原因的话,因为tomcat 自带相关消息收发的API,用起来方便 闲话少叙,进入实现步骤 使用工具  java 1.6      tomcat 7.0.27以上版本(以下版本不支持websocket),本人使用的是 7.0.42版本 先概括说一下:(看着迷糊没关系,下面有提供完整源码,可以下载后运行 ,结合效果自行分析) 先写一个,消息处理类,继承 tomcat的catalina.jar的Mes