Gin+Websocket为数百万个相互关联的分布式聊天网络提供单阶段支持

      最后更新:2021-11-30 17:52:32 手机定位技术交流文章

      本文解释如何建立网套聊天系统。

      戈兰g用于提供网络套接驳通信,单台机器支持100万个连接,包括金库架、金字塔负载、横向部署、内部程序通信和拼接通信协议。

      此纸更大, 如果您想要直接下载到 GoWebSocket 项目的项目经验中, 文本首先要定义什么是 WebSocket, 然后先介绍项目, 然后在Nginx 上建立域名, 用于 WebSocket 转播, 然后讨论如何建立分布式系统 。

      1、项目说明

      1.1 一般项目中使用的网络软件套结构

      1.2 项目体验

      Gowebsocket 是项目的 URL 。
      com/home/index.html。 校对:Soup
      打开连接后输入聊天界面 。
      一些人有能力同时打开两个窗口。

      2. 网页软件库概览

      有两个网套,到底是什么?

      WebSocket协议于2008年制定,2011年成为国际标准,得到了所有浏览器的支持。

      其最显著的特点是服务器能够将信息传送给客户和客户,将信息传送给服务器,这是一种真正的双向平等话语以及一种服务器传输技术。

      将HTTP和WebSocket通信程序进行比较。

      HTTP和WebSocket都支持配置证书,即ws://无证书 wss://config证书的协议标识符。

      2 2 个网套兼容性

      浏览器兼容性, 开始支持 WebSocket 版本


      服务端的支持
      戈兰、爪哇、惠普、诺德Js、皮顿和恩京克斯都得到了很好的支持。

      机器人与iOS兼容性
      Android可能会使用 Java-webSocket。

      WebSocket 功能可在iOS 4.2和以后的iOS 4.2上查阅。

      三、二、三、三、三、三、三、三、三、三、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、六、

      从业务角度看,积极主动的客户能力是必要的。
      大部分请求目前都是使用HTTP提出的,这是一项由客户发起的请求,随后采用基于服务的程序,提供回复,而该服务启动的数据无法单独提供给客户。

      多数情景必须主动传达给用户,如聊天系统、履行教育用户义务的用户,一些业务业务必须告知在线用户。
      提供用户在线状态访问权限。
      如果没有长长的连接,可以通过主动的客户查询检索数据。
      可以通过两种方式之一,利用一系列平台(H5/Android/IOS)做到这一点。


      创建网页软件库的步骤

      2.4.1 客户要求首先启动升级协议。

      客户端请求开始升级协议, 使用普通 HTTP 报告风格, 并添加信头信息

      Connection: Upgrade表明连接需要升级

      Upgrade: websocket有必要更新网络服务协议。

      Sec-WebSocket-Version: 13协议的版本为13

      Sec-WebSocket-Key: I6qjdEaqYljv3+9x+GrhqA==浏览器创建此 base64 编码, 与服务器响应的 Sec- WebSocket- Acception 相对应 。


      2.4.2 服务器响应升级协议

      当服务终端收到升级协议请求时,如果服务终端支持升级协议,将发出以下答复:

      返回:

      Status Code: 101 Switching Protocols表示支持切换协议

      二.四.3 升级协议完成后,客户和服务器将能够相互沟通。


      3. 如何实施基于网络的长链接系统

      3.1 使用连接到 WebSocket 服务器

      三、一.1 开始改变港口

      Webthuscket 必须倾听端口的声音, 因此应用程序必须在戈兰高地成功的主要功能中以协调的方式启动 。
      女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,女士,走,走,走吧,走吧,走吧,走,走吧,走吧,走吧,走吧,走吧,走吧,走吧,走吧,走吧,走吧,走吧,走吧,走吧,走吧,走吧,走吧,走吧,走吧,走吧,走吧,走吧,走吧,走,走吧,走吧,走吧,走吧,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走,走

      我不确定,Init_acc.

      三. 一.2 升级条约

      • 客户端通过 http 请求发送到服务, 我们需要将 http 协议修改为 Websocket 协议 。
      • HTTP升级申请得到妥善执行,我们将立即使用。
      • 建议每个连接都使用两个坐标处理客户请求并将数据传送给客户,在打开坐标时会消耗一些内存,但将读数分开,以限制接收和接收数据干扰的可能性。
      • init_acc.go

      3.1.3 客户连接管理

      • 究竟有多少人与当前应用程序相关联, 以及需要做些什么才能播出,
      • 使用 AppId+uid 来跟踪所有连接和登录用户。
      • 由于地图储存需要多方案编制以及读写、读写、读写锁。
      • 创建四个频道处理客户连接、用户登录、断开和全时广播等事件。

      由已注册客户端 socket 3. 1. 1.4 撰写的偏移处理器

      • 我们必须发现异常 以免程序崩溃
      • 在此使用字符串( 调试) 来显示意外崩溃位置 。 Stack () 打印调用堆放细节
      • 如果数据写入失败, 连接可能被黑入并关闭 。
      • client.go

      3.1.5 从注册客户端套接字读取同步处理器

      • 回收和处理客户提供的数据。
      • 如果数据读取失败, 关闭频道 。
      • client.go

      接收和处理客户数据

      • 同意传输和接收特定数据格式,并且为了方便js处理,使用json数据格式发送和接收数据(在创造就业时更容易使用人类可读格式)。
      • 登录发送数据示例:
      • 登录响应数据示例:
      • Websocket是一种双向数据通信,可以无限期地提供,如果提供数据需要服务终端回答,则需要顺序来了解哪个服务端回应是响应哪个请求数据。
      • 命令 cmd 用于决定动作 。 因为 Websocket 没有与 http 相同的 URL, 那么 Cmd 动作是什么?
      • 目前的行动包括:登录/心跳,发送登录请求和连接(浏览器、移动中介、Nginx和服务器随时可以删除没有长期数据的长期连接)。
      • 为什么您需要 AppID、 UsepherId 、 唯一指用户的域, 即通用的域, 以及任何平台( 网络、 应用程序、 iOS 等)? 用户日志允许未来扩展?
      • 记住 我不知道你在说什么..
      • response_model.go

      使用路由器处理3.one.7中的客户请求数据。

      • 处理客户同意的请求数据,使用路线。
      • 当引入请求类型时,可以与 http (路由控制器) 相似的方式处理请求类型。
      • acc_routers.go

      三.一.8 戈鲁廷避免内存溢漏和不回收

      删除超时任务超时连接
      没有登录的连接,以及没有登录的6分钟没有心跳的连接,将被终止。
      client_manager.go

      读写戈鲁廷语 一次失败,然后关闭两者。
      密闭式 索科特 索科特 索科特 索科特 索科特 索科特 索科特 索科特 索科特 索科特 索科特 索科特 索科特 索科特 索科特 索科特 索科特 索科特 索科特 索科特 索科特 索科特 索科特 索科特 索科特 索科特 索科特 索科特 索科特 索科特 索科特 索科特 索科特 索科特 索科特 索科特 索科特
      关闭关闭关闭关闭( c. Send connects), 当读 () Goroutine 无法读取数据时关闭写入( () Goroutine ) 。


      客户端主动关闭
      近距离读写基调
      删除 ClientManager 连接。


      跟踪用户连接和戈鲁廷数字。
      Goroutine在10个内存堆放场中有9个涉及Goroutine。
      添加一个 http 界面, 用于查看系统状态并防止重现 Goroutine 。


      查看系统状态
      在 Nginx 中设定非活动连接发布时间以避免忘记已关闭连接


      利用分析能源,这是时间要求很高的。


      三点二 JavaScript WebSocket 客户端

      二、三、二、一、二、二、二、二、二、二、二、二、二、二 监听程序应启动并登记

      j 创建连接并处理成功连接、接收数据和断开连接的事件。

      传送数据 在三,二,二,三,二,二,二,二,二,二。

      请铭记在连接成功建立之前无法传输数据 。
      当连接建立时,从客户端向服务器发送数据样本。

      4. GoWebSocket项目

      4.1 项目说明

      该项目是建立在网络软件的分布式IMM技术基础上的。

      客户端随机分配用户名,每个人进入聊天室进行集体聊天活动。

      可通过单一系统(24个核128G 记录和档案管理系统)支持百万客户连接。

      支助级部署,其中部署的计算机可相互通讯。

      项目架构图

      4.2 项目依赖

      这个项目只需要使用复立和谷歌即可。
      在项目中使用了对高原管理的依赖性,可直接使用克隆项目。
      # 主要使用到的包

      4.3 项目启动

      克隆项目

      修改项目配置

      配置文件说明

      启动项目

      进入IM聊天地址
      http://127.0.0.1:8080/home/index
      您可以在这里试一下基于网页的 IM 系统 。

      5. WebSocket 项目的 Nginx 设置

      Nginx 配置的五个原因

      为了限制渗透的可能性,使用nginx来分割内部和外部网络,并暴露仅仅Nginx的IP(典型的互联网公司在Nginx之前增加一层LVS来装载平衡)。
      使用 Nginx 来受益于 Nginx 的负载功能。 当前端被重新使用时, 只需连接固定域名, 交通将分散到使用 Nginx 的其他计算机 。
      同时,我们可以采用Nginx的各种载荷方法(湿重、重量、ip_hash)。

      nginx 5. 2 设置

      使用域名 im. that's right, 91vh.com 是一个配置的例子。
      没错,91vh.com/acc是WebSocket的,正在重新转口(第1项)。 3.31 Began支持,与Tengine一样的设置),通往Golang 8089港口加工。
      HTTP使用另一个目录,该目录转至戈兰G8080港口处理。

      5.3 问题处理

      要检查配置文件是否准确, 请使用 nginx 测试命令 。

      如果出现错误

      处理方法
      添加到 ginx. com

      端对端和跳跃式头版都有。

      6、压测

      第六,优化Linux内核。

      设置文件打开句柄数

      配置插座的连接参数

      6.2 压测准备

      测试结果,如果有的话,请补充结果

      在此之后,将遵循使用机器的特定课程,写出压力,优化内核,并创建压力数据。

      请着手对压力测量进行压力测量,从应用机开始,优化内核,部署项目压力,并描述压力原理。

      6.3 压测数据

      • 在项目使用期间,每个连接大约需要24Kb的内存,每个Goroutine大约需要11Kb。
      • 一百万个连接需要22G的内存记录和档案管理。
      在线用户数 cpu 内存 I/O net.out
      1W
      10W
      100W

      7. 如何使用 WebSocket 创建分布的 Im

      7.1 说明

      参考本项目源码

      照片来自Flickr用户pic.

      Im System Gowebsocket v2. 照片来自Flickr用户pic.

      由于介绍的原因,将IM和WebSocket(acc)技术合并在一起。

      IM系统接口:
      获得所有在线用户、所有清单前服务用户和集群服务所有用户。
      从 http 界面( 也是微额邮件网页上的 http 界面) 发送信息, 并分为两部分:
      一. 单独提供服务,使会计制度在商业逻辑上既基本可行,又基本可行。
      通过网络用户界面而不是网络用户界面提供两篇文章,从而能够接收和单独发送数据,提高接收和交付数据的效率。

      7.2 架构

      项目登记时间表和用户连接


      从其他系统(IM、任务)向WebSocket(acc)系统用户传送信息的时间序列。

      7.3 部署分配系统

      • 横向部署两个示范分部署(ebbsocket和gowebsocket1)。
      • 项目如何相互联系:项目启动后,Ip和rpcPort在Redis注册,以便其他项目了解它们在必要时使用gRpc进行通信。
      • gowebsocket
      • gowebsocket1
      • Nginx配置

      在现有的 Nginx 设置中添加第二台机器的 IP 地址和端口 。

      • 当你完成Nginx的配置后, 重新启动它 。
      • 重开请求, 看看是否与您的期望相符:

      检查请求是否基于两件事。
      实验两个与不同事物相连的用户(gowebsocket和gowebsocket1)相互传递信息的能力。

      • 关于分布式部署

      该项目只是说明项目将如何分配,单元在部署后如何相互连接。
      该系统没有单一点故障,还需要Nginx集群、Redis集群等等。

      8、回顾和反思

      8.1 用于其他系统

      • 开发该系统是为了保持与客户的长期连接,与外部系统有两个接口(检查用户是否在线,向在线用户发送信息),以及将业务分开。
      • 在业务分开时,只能使用若干行动,而不是每次行动都长时间连接。

      八.2. 已经发挥的功能

      • 生成日志( 请求日志+调试日志)
      • 读取配置文件 完成
      • 使用定时器脚本的干净已过期无法打赢的连接Name
      • http 界面, 获取登录, 完成连接的数量
      • 网络上有多少人? http接口, Send Push,网络上有多少人?
      • grpc 程序内部通讯,信件发送完成
      • AppId 允许单个用户在不同平台登录。
      • 想法,让所有互联网上的人进来, 并发送信息。
      • 单聊、群聊 完成
      • 分布、横向扩展和完成。
      • 压测脚本
      • 文档整理
      • 文件目录,实现百万长连接,为什么是IM,以及如何实现IM
      • 架构图以及扩展


      IM实现细节:

      • 确定文本信息的结构
      • HTML 中发送文本信件
      • 接口接受文本信息并将其转发给所有收件人。
      • HTML 接收到的 HTML 消息已显示为接口已完成
      • 用户界面已经优化,必须持续优化。
      • 当有人加入我们, 我们都在直播。
      • 为进入聊天室提供一个信息框架。
      • 引入机器人 待定

      8.3 需要改进和优化。

      • 登录, 以微信签名, 获得昵称、 头等 。
      • 既有会计制度,也有信息系统。
      • 用户界面已经精简,适合蜂窝端的需要。
      • 短信(支持的表情)、图像、语音信息和视频信息
      • 例如,微型服务的登记、发现和熔炼。
      • 添加一个配置项目,指定单个计算机的最大连接次数。

      8.4 总结

      • 虽然已经实现了分布式的IMM谈话,但许多细节需要处理(进入无法进入,接口必须精简等),但它表明WebSocket如何处理广泛的业务要求。
      • 虽然本文提到一台计算机有100万长的连接(对记忆满意),但实际情况要复杂得多(cpu有一定的压力),当然,如果你有如此庞大的生意购买多台机器来支持你的业务,这一软件只是展示如何利用网络套件进行实际工作。
      • 在此指南的帮助下,您可以创建符合您要求的软件。

      9、参考文献

      WebSocket 简单单服务器 5w 和 jmter 实测试 nginx LVS 博客 nginx break 216 连接限制

      维基百科网页套

      WebSocket的导师

      WebSocket 协议: 从开始到完成 5 分钟

      100w 单机连接到实战

      link1st gowebsocket Github 搜索

      https://github.com/link1st/gowebsocket

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/13932.html

          热门文章

          文章分类