基于websocket单台机器支持百万连接分布式聊天(IM)系统 |
您所在的位置:网站首页 › websocket服务器最大连接数 › 基于websocket单台机器支持百万连接分布式聊天(IM)系统 |
本文将介绍如何实现一个基于websocket分布式聊天(IM)系统。 使用golang实现websocket通讯,单机可以支持百万连接,使用gin框架、nginx负载、可以水平部署、程序内部相互通讯、使用grpc通讯协议。 本文内容比较长,如果直接想clone项目体验直接进入项目体验 goWebSocket项目下载 ,文本从介绍webSocket是什么开始,然后开始介绍这个项目,以及在Nginx中配置域名做webSocket的转发,然后介绍如何搭建一个分布式系统。 目录1、项目说明1.1 goWebSocket1.2 项目体验2、介绍webSocket2.1 webSocket 是什么2.2 webSocket的兼容性2.3 为什么要用webSocket2.4 webSocket建立过程3、如何实现基于webSocket的长连接系统3.1 使用go实现webSocket服务端3.1.1 启动端口监听3.1.2 升级协议3.1.3 客户端连接的管理3.1.4 注册客户端的socket的写的异步处理程序3.1.5 注册客户端的socket的读的异步处理程序3.1.6 接收客户端数据并处理3.1.7 使用路由的方式处理客户端的请求数据3.1.8 防止内存溢出和Goroutine不回收3.2 使用javaScript实现webSocket客户端3.2.1 启动并注册监听程序3.2.2 发送数据4、goWebSocket 项目4.1 项目说明4.2 项目依赖4.3 项目启动5、webSocket项目Nginx配置5.1 为什么要配置Nginx5.2 nginx配置5.3 问题处理6、压测6.1 Linux内核优化6.2 压测准备6.3 压测数据7、如何基于webSocket实现一个分布式Im7.1 说明7.2 架构7.3 分布式系统部署8、回顾和反思8.1 在其它系统应用8.2 需要完善、优化8.3 总结9、参考文献1、项目说明1.1 goWebSocket本文将介绍如何实现一个基于websocket聊天(IM)分布式系统。 使用golang实现websocket通讯,单机支持百万连接,使用gin框架、nginx负载、可以水平部署、程序内部相互通讯、使用grpc通讯协议。 一般项目中webSocket使用的架构图![]() WebSocket 协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了。 它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。 HTTP和WebSocket在通讯过程的比较![]() ![]() ![]() golang、java、php、node.js、python、nginx 都有不错的支持 Android和IOS的支持Android可以使用java-webSocket对webSocket支持 iOS 4.2及更高版本具有WebSockets支持 2.3 为什么要用webSocket从业务上出发,需要一个主动通达客户端的能力目前大多数的请求都是使用HTTP,都是由客户端发起一个请求,有服务端处理,然后返回结果,不可以服务端主动向某一个客户端主动发送数据![]() 客户端发起升级协议的请求,采用标准的HTTP报文格式,在报文中添加头部信息 Connection: Upgrade表明连接需要升级 Upgrade: websocket需要升级到 websocket协议 Sec-WebSocket-Version: 13 协议的版本为13 Sec-WebSocket-Key: I6qjdEaqYljv3+9x+GrhqA== 这个是base64 encode 的值,是浏览器随机生成的,与服务器响应的 Sec-WebSocket-Accept对应 # Request Headers Connection: Upgrade Host: im.91vh.com Origin: http://im.91vh.com Pragma: no-cache Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits Sec-WebSocket-Key: I6qjdEaqYljv3+9x+GrhqA== Sec-WebSocket-Version: 13 Upgrade: websocket![]() 服务端接收到升级协议的请求,如果服务端支持升级协议会做如下响应 返回: Status Code: 101 Switching Protocols 表示支持切换协议 # Response Headers Connection: upgrade Date: Fri, 09 Aug 2019 07:36:59 GMT Sec-WebSocket-Accept: mB5emvxi2jwTUhDdlRtADuBax9E= Server: nginx/1.12.1 Upgrade: websocket升级协议完成以后,客户端和服务器就可以相互发送数据![]() |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |