简单的go写的websocket协议 im 聊天 服务,流程简单清晰,采用golang编写,flutter im客户端。免费开源哈,随意用

mini-im

1、说明:

项目地址:https://github.com/haomiao33/minim

1.1、项目介绍:

简单的go写的im服务,流程简单清晰,大部分接口使用的是http,方便流程控制。login服务目前只是用来做服务端推送消息通知到客户端。本项目采用golang编写,分为login、api、msg-push、online等服务,这些服务都能集群部署和多个实例扩展。用户可以扩充其他协议和服务。

目前打算golang编写im,支持单聊、群聊、推送; 然后客户端目前只打算做个flutter im chat 版本的就行。方便大家集成。

文档放在doc里面了

sql里面是数据库,自己创建一个就行

测试客户端:目前是写到testclient目录里面的,nodejs的

目前有如下服务(每个服务都可以多实例,方便用户量上来扩展和分布式,目前服务注册到consul里面的):

login: 用户登录服务,目前只用来接收服务端下发的消息(主要是消息通知),用户和im的websocket,使用 gnet,后续可以扩展到tcp、udp等,长连接都连接到login服务。不同服务交互使用的grpc,这里面没有写用户认证什么的,大家可以根据自己的业务需求来完成。

api: 消息接口服务,采用fiber编写,主要处理客户端的接口请求:消息发送、消息同步、会话管理等等这些。
    
msg-push: 消息推送服务,单聊消息推送
    
online: 在线状态服务,用户在线状态放在这里,内部使用redis存放。login服务

1.2、项目特点:

1、go编写,每个服务都能多实例扩展分布式,无状态。
2、使用gnet高并发库作为底层支持,目前支持websocket、后续可以很轻松扩展到gnet tcp等协议
3、使用fiber作为api接口底层,支持高并发
4、消息表目前支持分表,可以在创建的时候创建n个消息表im_msg_0是默认的
5、协议简单,目前通信通道websocket只来做消息下发通知,其他的都通过api接口实现,稳定简单可靠,扩展性强
6、使用kafka作为消息mq,高负载,后续添加群聊能很好支持
7、有flutter客户端sdk和demo
8、支持离线推送,配套的离线推送anroid和flutter插件,支持(vivo、oppo、华为、小米)(https://github.com/haomiao33/ym_flutter_push)

1、3 项目部署:

查看 部署方法 文件

2、登陆

在这里插入图片描述

3、单聊消息:流程图

3.1、单聊流程图

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/938125.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

多音轨视频使用FFmpeg删除不要音轨方法

近期给孩子找宫崎骏动画,但是有很多是多音轨视频但是默认的都是日语,电视上看没办法所以只能下载后删除音轨文件只保留中文。 方法分两步,先安装FFmpeg在转文件即可。 第一步FFmpeg安装 FFmpeg是一个开源项目,包含了处理视频的…

GitHub企业版:AWS CodeCommit迁移的最佳路径与技术优势

此前,亚马逊网路服务(AWS)宣布,自2024年7月25日起,AWS CodeCommit不再接受新客户。虽然现有客户可以继续使用该服务,且其安全性、可用性和性能将得到维护,但AWS将不再推出新功能或接受新用户。 …

龙旗科技社招入职测评:言语理解材料计算图形推理真题北森题库考什么?

龙旗科技社招入职测评北森题库主要考察以下几个方面: 1. **言语逻辑**:这部分的考试时间是10分钟,需要完成10道题目。每题的作答时间被限定为60秒,一旦提交后无法返回修改。题目类型包括总结中心思想、选词填空和推理文章意思。考…

并发编程中数据的可见性

一、什么是并发编程的可见性? 在并发编程中,“可见性”是指一个线程对共享变量的修改是否能被其他线程及时看到的特性。 二、不可见情况的测试 现在设置成员属性flagtrue,如果flagtrue则t1线程一直死循环执行任务,main线程设置fl…

不配置python环境,直接用PyCharm就可以?

有的伙伴可能遇到不安装python环境只安装pycharm也可以进行运行代码。 所以自认为是不需要解释器就可以运行? 这个是不现实的,有很多伙伴可能是安装了Pycharm,但Pycharm看你电脑上没有解释器,所以在安装的时候给你默认安装在C盘…

C语音顺序表专题及应用

数据结构引进 0数据结构相关概念 0.1什么是数据结构 数据结构是由“数据”和“结构”两词组合而来。 什么是数据?常见的数值1、2、3、4…、教务系统⾥保存的用户信息(姓名、性别、年龄、学历等等)、网页肉眼可以看到的信息(⽂字…

单元测试总结

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 Hello!大家好,我是一个专注于分享软件测试干货的测试开发。 对于软件测试,我们先按照开发阶段来进行划分,将软件测…

immaculate C# DragDrop 注册失败 解决 C#窗口程序如何看控制台打印的日志

C# DragDrop 注册失败 System.InvalidOperationExceptionHResult0x80131509MessageDragDrop 注册失败。SourceSystem.Windows.FormsStackTrace:在 System.Windows.Forms.Control.SetAcceptDrops(Boolean accept)在 System.Windows.Forms.Control.OnHandleCreated(EventArgs e)…

怎样衡量电阻负载的好坏

电阻负载的好坏通常通过以下几种方法来衡量: 1. 测量电阻值:最直接的方法是使用万用表来测量电阻负载的电阻值。将万用表设置在适当的电阻档位,然后将测试笔连接到电阻负载的两个引脚上。如果电阻负载是好的,那么万用表应该显示一…

酒蒙子骰子小程序系统

酒蒙子流量变现小程序小游戏 后端tp8 前端uniapp 会员变现 分销推广 流量主 …

Spring Boot 3.x:自动配置类加载机制的变化

随着 Spring Boot 3.x 版本的发布,Spring Boot 引入了一些关键的变更。其中最重要的一项变更是 自动配置类的加载机制。在之前的版本中,Spring Boot 使用 spring.factories 文件来管理自动配置类的加载。然而,在 Spring Boot 3.x 中&#xff…

网络安全学习路线

《网络安全自学教程》 网络安全这几年改成了网络空间安全,因为网络空间也是国家主权之一,网络空间不安全,你就要在别人眼皮子底下裸奔,当然,非洲的小伙伴就不用担心受到威胁,毕竟他们连网都没有。 网络安全…

【Linux网络编程】第十一弹---HTTP协议全解析:从请求响应到方法与Header的详尽指南

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【Linux网络编程】 目录 1、HTTP 协议 1.1、认识 URL ​1.2、urlencode 和 urldecode 1.3、HTTP 协议请求与响应格式 1.3.1、代码…

从 Router 到 Navigation:HarmonyOS 路由框架的全面升级与迁移指南

在本教程中,我们深入探讨了 Router 和 Navigation 在 HarmonyOS 中的用法差异及如何从 Router 切换到 Navigation 的方法。重点涵盖了页面跳转、转场动画、生命周期管理以及跨包路由的实现。 页面结构对比 Router 页面结构 每个页面需要使用 Entry 注解。 页面需要…

账号下的用户列表表格分析

好的,这是您提供的 el-table 组件中所有列的字段信息,以表格形式展示: 列标题 (label)字段属性 (prop)对齐方式 (align)宽度 (width)是否可排序 (sortable)说明IDidcenter100否管理员的唯一标识符头像avatarcenter90否管理员的头像 URL 或路…

luckysheet与superslide冲突解决

[现象]控制台报错、界面无法操作 $是jquery。查看源码,发现mousewheel方法来自插件mousewheel,luckysheet初始应该会将mousewheel挂载在jquery上。 在控制台打印jquery取dom及其方法,结果如下: 不存在mousewheel方法&#xff0c…

windows使用python写的YOLO来实现目标识别

使用labelImg标注,YOLO进行目标训练 一、labelImg工具下载及使用1、下载labelImg(目标标注工具[【点我下载】](https://github.com/HumanSignal/labelImg))2、使用labelImg 二、下载及使用YOLO1、下载及使用ultralytics(volo[点击…

Java——多线程(上)

一 (线程的介绍) 1 多线程的基本概念 (每个进程由三部分构成——>CPU,Data,Code,进程之间完全独立,内存隔离) (运行在进程内的,一个进程可以包含多个线程,线程之间是可以并行的,并且共享相…

SpringBoot3+graalvm:整合并打包为可执行文件

原文网址:SpringBoot3graalvm:整合并打包为可执行文件-CSDN博客 简介 本文介绍SpringBoot3如何整合graalvm,并打包为可执行文件。Windows和Linux都打包。 版本 springboot3.3.6 graalvm21(包含JDK21(21是最新的LT…

【Bolt.new + PromptCoder】三分钟还原油管主页

【Bolt.new PromptCoder】三分钟还原油管主页 PromptCoder官网:PromptCoder Bolt官网:https://bolt.new/ Bolt 是什么? Bolt.new 是一个提供创建全栈网络应用服务的平台。它允许用户通过提示(Prompt)、运行&#x…