{"repo":"link1st/gowebsocket","free":true,"listed":false,"github":"https://github.com/link1st/gowebsocket","clone":"git clone https://github.com/link1st/gowebsocket.git","description":"golang基于websocket单台机器支持百万连接分布式聊天(IM)系统","language":"Go","stars":3105,"topics":["golang","websocket","grpc","gin","nginx","im"],"license":null,"category":"networking-infra","readme_excerpt":"基于websocket单台机器支持百万连接分布式聊天(IM)系统 本文将介绍如何实现一个基于websocket分布式聊天(IM)系统。 使用golang实现websocket通讯，单机可以支持百万连接，使用gin框架、nginx负载、可以水平部署、程序内部相互通讯、使用grpc通讯协议。 本文内容比较长，如果直接想clone项目体验直接进入项目体验 goWebSocket项目下载 ,文本从介绍webSocket是什么开始，然后开始介绍这个项目，以及在Nginx中配置域名做webSocket的转发，然后介绍如何搭建一个分布式系统。 目录 - 1、项目说明 - 1.1 goWebSocket - 1.2 项目体验 - 2、介绍webSocket - 2.1 webSocket 是什么 - 2.2 webSocket的兼容性 - 2.3 为什么要用webSocket - 2.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 发送数据 - 3.3 发送消息 - 3.3.1 文本消息 - 3.3.2 图片和语言消息 - 4、goWebSocket 项目 - 4.1 项目说明 - 4.2 项目依赖 - 4.3 项目启动 - 4.4 接口文档 - 4.4.1 HTTP接口文档 - 4.4.1.1 接口说明 - 4.4.1.2 聊天页面 - 4.4.1.3 获取房间用户列表 - 4.4.1.4 查询用户是否在线 - 4.4.1.5 给用户发送消息 - 4.4.1.6 给全员用户发送消息 - 4.4.2 RPC接口文档 - 4.4.2.1 接口说明 - 4.4.2.2 查询用户是否在线 - 4.4.2.3 发送消息 - 4.4.2.4 给指定房间所有用户发送消息 - 4.4.2.5 获取房间内全部用户 - 5、webSocket项目Nginx配置 - 5.1 为什么要配置Nginx - 5.2 nginx配置 - 5.3 问题处理 - 6、压测 - 6.1 Linux内核优化 - 6.2 压测准备 - 6.3 压测数据 - 7、如何基于webSocket实现一个分布式Im - 7.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使用的架构图 1.2 项目体验 - 项目地址 gowebsocket - IM-聊天首页 或者在新的窗口打开 http://im.20jd.com/home/index - 打开连接","default_branch":null,"files":null,"tree":[],"storefront":"/r/link1st","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/link1st/gowebsocket/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}