{"repo":"kone-net/go-chat","free":true,"listed":false,"github":"https://github.com/kone-net/go-chat","clone":"git clone https://github.com/kone-net/go-chat.git","description":"go-chat.使用Go基于WebSocket开发的web聊天应用。单聊，群聊。文字，图片，语音，视频消息，屏幕共享，剪切板图片，基于WebRTC的P2P语音通话，视频聊天。","language":"Go","stars":1087,"topics":["go","chat","websocket","chat-application","golang","protobuf","im"],"license":null,"category":"chat-messaging","readme_excerpt":"go-chat 使用Go基于WebSocket的通讯聊天软件。 功能列表 登录注册 修改头像 群聊天 群好友列表 单人聊天 添加好友 添加群组 文本消息 剪切板图片 图片消息 文件发送 语音消息 视频消息 屏幕共享（基于图片） 视频通话（基于WebRTC的p2p视频通话） 分布式部署（通过kafka全局消息队列，统一消息传递，可以水平扩展系统） 后端 代码仓库 go中协程是非常轻量级的。在每个client接入的时候，为每一个client开启一个协程，能够在单机实现更大的并发。同时go的channel，可以非常完美的解耦client接入和消息的转发等操作。 通过go-chat，可以掌握channel的和Select的配合使用，ORM框架的使用，web框架Gin的使用，配置管理，日志操作，还包括proto buffer协议的使用，等一些列项目中常用的技术。 后端技术和框架 web框架Gin 长连接WebSocket 日志框架Uber的zap 配置管理viper ORM框架gorm 通讯协议Google的proto buffer makefile 的编写 数据库MySQL 图片文件二进制操作 前端 基于react,UI和基本组件是使用ant design。可以很方便搭建前端界面。 界面选择单页框架可以更加方便写聊天界面，比如像消息提醒，可以在一个界面接受到消息进行提醒，不会因为换页面或者查看其他内容影响消息接受。 前端代码仓库： 前端技术和框架 React Redux状态管理 AntDesign proto buffer的使用 WebSocket 剪切板的文件读取和操作 聊天框发送文字显示底部 FileReader对文件操作 ArrayBuffer，Blob，Uint8Array之间的转换 获取摄像头视频（mediaDevices） 获取麦克风音频（Recorder） 获取屏幕共享（mediaDevices） WebRTC的p2p视频通话 截图 语音，文字，图片，视频消息 视频通话 屏幕共享 消息协议 protocol buffer协议 选择协议原因 通过消息体能看出，消息大部分都是字符串或者整型类型。通过json就可以进行传输。那为什么要选择google的protocol buffer进行传输呢？ 1. 传输快 因为protobuf序列化后的大小是json的10分之一，是xml格式的20分之一，但是性能却是它们的5 100倍. 2. 支持二进制 当我们看到消息体最后一个字段，是定义的bytes，二进制类型。 我们在传输图片，文件，视频等内容的时候，可以将文件直接通过socket消息进行传输。 当然我们也可以将文件先通过http接口上传后，然后返回路径，再通过socket消息进行传输。但是这样只能实现固定大小文件的传输，如果我们是语音电话，或者视频电话的时候，就不能传输流。 快速运行 MySQL创建数据库 创建表 在user表里面添加初始化用户 运行go程序 go环境的基本配置 ... 拉取后端代码 进入目录 拉取程序所需依赖 修改数据库配置文件 修改数据库连接用户名，密码等信息。 运行程序 运行前端代码 前端代码仓库： ---- 分布式部署 拉取代码 将代码拉取到服务器，运行make build构建后端代码。 构建后端服务镜像 进入目录deployments/docker 通过目录下的Dockerfile构建镜像 部署服务 需要部署nginx进行反向代理，mysql保存数据，1个或者多个后端服务。 在config.toml中配置分布式消息队列 将ms","default_branch":null,"files":null,"tree":[],"storefront":"/r/kone-net","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/kone-net/go-chat/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."}