
现代IM架构实战
文章平均质量分 78
深入学习和理解现代im架构,打造百万级高可用高性能高并发的开源IM服务器。
Go和分布式IM
这个作者很懒,什么都没留下…
展开
-
利用Kafka的Assign模式实现超大群组(10万+)消息推送
本文通过图文并茂的方式,介绍使用kafka 手动消费分区的方式实现广播的效果,解决了百万级别长连接网关的消息路由问题,提升了整体系统性能和可用性原创 2022-09-23 09:50:27 · 2640 阅读 · 0 评论 -
史上最全面聊天机器人总结(图灵、思知、小i、小微)
翻了下自己在2020年发的文章,主要是对聊天机器人进行了一些科普和简介,结合公众号的定位,故打磨下分享出来,希望有用!原创 2022-07-11 15:29:38 · 14923 阅读 · 0 评论 -
跳槽季,技术面试最后反问面试官的话
跳槽季,用好GitHub,面试事半功倍!最近,我在github上发现一个宝藏仓库(我是如何发现的?方法见文末),列举了技术面试最后反问环节,一些反问面试官的话。地址:英文原版:https://github.com/viraptor/reverse-interview中文翻译:https://github.com/yifeikong/reverse-interview-zh为了方面大家,我把内容放在下面,知识版权归 reverse-interview 所有。推荐问题问HR试用期:试用期有原创 2022-02-15 13:23:06 · 765 阅读 · 0 评论 -
Golang中如何正确的使用sarama包操作Kafka?
背景在一些业务系统中,模块之间通过引入Kafka解藕,拿IM举例(图来源):用户A给B发送消息,msg_gateway收到消息后,投递消息到Kafka后就给A返回发送成功。这个时候,其实还没有持久化到mysql中,虽然最终会保持一致性。所以,试想如果Kafka丢消息了,是不是就出大问题了?A认为给B发送消息成功了,但是在服务器内部消息丢失了B并没有收到。所以,在使用Kafka的时候,有一些业务对消息丢失问题非常的关注。同样,常见的问题还有:重复消费的问题。乱序的问题。下面我们来一起看一下原创 2021-08-10 16:34:44 · 3802 阅读 · 1 评论 -
macOS Big Sur安装QT,结合Clion实现跨平台Desktop应用开发环境和实例
文章目录概述安装全新安装修改使用运行例子可视化界面QMLQt Quick、QML和Qt WidgetQt Widget例子新建工程运行实现登录界面实现界面跳转实战Sketch蓝湖介绍样式表效果演示新建资源文件在Clion中使用结语概述通过一周的摸索,零基础在macOS Big Sur下安装了QT,实现了一个简单的登录页面,效果如下:运行效果:设计界面:在Clion中运行:感觉比较爽,遂记录一下。安装全新安装先去 官网 注册一个账号找到 Downloads for open sou原创 2021-07-22 12:55:30 · 1687 阅读 · 0 评论 -
IM敏感词算法原理和实现
文章目录IM敏感词算法原理和实现字符串查找KMPTrie树Trie树的基本性质基础入门分析与实现数据结构定义insert实现search实现startsWith实现敏感词搜索性能测试中文替换为*的实现Unicode编码UTF8部分汉字编码范围实现汉字替换为*停顿词实现全角和半角实现DFA算法AC自动机敏感词库总结参考IM敏感词算法原理和实现很早之前就打算做这一块,刚好最近有时间研究一下。网上一般都能找到很多资料,这里简单说一下我的理解吧。PS:手机号匹配使用正则表达式,不属于敏感词范畴,请注意。原创 2021-06-17 20:45:10 · 3073 阅读 · 0 评论 -
SSL_shutdown崩溃Broken pipe
文章目录问题解决方式原理问题static inline void SSL_free_(SSL *&ssl) { if (ssl) { ::SSL_shutdown(ssl); // crash ::SSL_free(ssl); ssl = nullptr; }}写了个性能测试工具,每 20毫秒启动一个协程 ,进行TCP连接和SSL握手,然后关闭。服务端运行过程中,程序有时在SSL_shutdown处崩溃,如果降低客户端连接频率,该问题原创 2021-06-07 14:23:54 · 1832 阅读 · 0 评论 -
proxy_next_upstream 对POST无效
proxy_next_upstream 对POST无效根据网上的教程,启用proxy_next_upstream后发现没有生效: upstream login_server{ server 10.32.105.18:8080 max_fails=1 fail_timeout=30s; server 10.32.80.75:8080 max_fails=1 fail_timeout=30s backup; } server { li原创 2021-06-02 21:17:04 · 805 阅读 · 0 评论 -
centos7 添加快捷方式 Clion
CentOS 7 Clion添加快捷方式问题从Clion官网下载后,得到 CLion-2021.1.1.tar.gz 压缩包,直接解压,执行bin/clion.sh就可以启动,但是每次这样也太不方便了。相比ubuntu 20,可以直接从应用商店安装,得吐槽一下。下面教大家一个方法,可以实现和ubuntu 20类型的效果,可以从应用程序启动。再也不用开一个终端来启动clion了!效果下载Clion访问官网 https://www.jetbrains.com/clion/ ,点击下载解压安装原创 2021-05-19 12:14:37 · 845 阅读 · 2 评论 -
ubuntu20搭建C++开发环境
文章目录概述Ubuntu20安装Ubuntu20中文输入法问题SSH启用Clion安装安装clion字体大小不等clion代码模板配置默认文件头自定义代码VS Code基础编译环境和库Git客户端概述放一张图先编辑器IDE:Clion 2020.3.2 + VS CodeGit客户端:GitKrakenUbuntu20安装官网下载镜像比较慢,可以使用网易的源下载。20.04版本:点进去根据你的电脑版本下载iso后缀那个http://mirrors.aliyun.com/ubuntu-原创 2021-03-03 12:02:47 · 2474 阅读 · 0 评论 -
利用企业微信API实现天气机器人、故障报警机器人等
概述很多公司内部都会使用企业微信进行通讯,恰恰企业微信又对我们开放了API,我们可以很方便的使用它提供的API实现一些自动化的功能。比如在我们公司内部,定加班餐都需要在美餐页面点,并且只能是当天且在16:30以前。忙的时候,可能有人就会忘记,于是有人起了一个16:00的定时任务,通过企业微信的API,定时在群里发送订餐提醒。由此,我们得到启发,是不是可以创建一个线上故障群,如果监控到故障,就发送一条报告到该群内。相比邮件,这种提醒方式更及时,并且不受电脑的限制,只需要在手机上把企业微信的通知打开,随原创 2021-02-26 13:49:58 · 3267 阅读 · 0 评论 -
彻底解决网易duilib进程有时候退不出的问题
背景在使用 网易开源的Duilib 开发Windows应用的时候,随着功能越加越多,可能会遇到进程退出不彻底的问题。原因可能有:没有正确释放相关资源BUG后台线程没有退出……这个时候,我们不妨参考安卓的一些做法,在一些入口处,调用系统API强制结束整个进程即可。Kill My Self在网易的duilib框架中,整个应用退出,会回调Cleanup函数,此时我们只需要在该函数中结束当前进程即可:// kill myselfHANDLE hself = GetCurrentProces原创 2021-02-02 15:19:03 · 772 阅读 · 0 评论 -
浅析IM开发中的大小端和字节对齐问题
文章目录大小端什么是大小端?在哪些场景下会遇到大小端问题?C/C++的网络编程中Go中的大小端Java中的大小端结论字节对齐什么是字节对齐?内存访问粒度定义对齐基础单字节内存访问粒度双字节内存访问粒度四字节内存访问粒度结构对齐为什么要考虑字节对齐结论大小端什么是大小端?在不同的计算机体系结构中,对于数据(比特、字节、字等)的存储和传输机制有所不同;目前在各种体系结构的计算机中,主要采用的字节存储机制主要有两种:大端(Big-endian)和小端(Little-endian)。字节序,又称端序,尾序原创 2020-12-15 15:10:55 · 999 阅读 · 3 评论 -
微信对话开放平台实战——回调函数和服务接口调用详解
文章目录引言服务接口调用场景操作步骤创建高级技能增加意图(问答)补充用户问法语义槽设置服务接口配置配置回答接口准备测试回调函数创建配置接口API代码效果(有问题)关于引言我的这篇文章中:微信对话开放平台实战——打造企业智能客服机器人,技能多,免费介绍了打造对话聊天机器人的详细步骤,但是对于微信调用我们API的方式(见方式2)没有介绍,这篇文章作为补充说明。微信主动调用我们的API也有2种方式:回调函数服务接口调用回调函数一般用作通知,服务接口可实现动态答案(答案中某些部分是实时变化原创 2020-11-16 15:37:59 · 6007 阅读 · 4 评论 -
IM开发——群组创建业务设计
需求分析群聊是很基础的功能需求,在进行群组聊天前,逃不过创建群组的这么一个过程。接下来,我们对微信进行一个简单的分析,然后设计一套类似于微信操作体验的业务。主动方:被动方:所以,根据上面的图,分析可得:创建群组的时候,需要能指定成员列表创建成功后,要自动创建会话,并产生一条群提示,广播给其他人,被邀请加入了群聊。模块交互设计app发送创建群组请求,附带群组名称(为空时,自动生成群名)和成员列表转发插入群组添加成员为每个人创建群聊会话插入一条群聊消息,消息类型为tips原创 2020-11-02 16:51:12 · 1055 阅读 · 0 评论 -
Swift——仿微信发起群聊悬浮框实现
效果声明:原作者为 TSWeChat,这里只是记录笔者移植到自己项目中使用的过程。安装pod添加依赖:pod 'Dollar', '9.0.0' # 操作数组的神器,比如将数组划分成若干个子集pod 'RxSwift', '~> 5' # 一个组合异步和事件驱动编程的库pod 'RxCocoa', '~> 5' # iOS响应式编程中的两个主流框架(RxSwift+RxCocoa)pod 'SnapKit', '~> 5.0.0' # 自原创 2020-10-30 11:10:04 · 771 阅读 · 0 评论 -
TeamTalk源码分析——群聊技术方案和群未读计数的实现
群聊分析app发送群消息到msg_servermsg_server收到后,以本地时间戳设置消息创建时间(客户端时间不可靠)转发向数据库查询群ID有效性,非法则直接忽略该成员是否在群成员内,非法则直接忽略用户和群的会话是否存在,不存在自动创建一条会话关系生成群内唯一消息ID写入数据库表group_msg中(按照gruopId%8分表)返回ack返回ack(如果有多端登录,广播msg到多个端,各个端再回复ack确认)向db_proxy_server查询群成员列表查数据库接收群成员原创 2020-10-27 17:55:28 · 1242 阅读 · 0 评论 -
go rocketmq——ConsumeFromTimestamp的注意事项
go rocketmq——ConsumeFromTimestamp的注意事项消费者go中使用rocketmq为什么ConsumeFromTimestamp模式下,还能消费到之前生产的消息?调查ConsumeFromTimestamp解决办法总结消费者go中使用rocketmq初始化消费者的时候,官方例子是这样的:c, _ := rocketmq.NewPushConsumer( consumer.WithGroupName("testGroup"), consumer.WithNsRes原创 2020-07-01 14:08:11 · 4063 阅读 · 1 评论 -
基于邮件的IM工具-Delta Chat
基于邮件的IM工具-Delta Chat简介实测安装下载邮箱设置关于作者简介Delta Chat 是一款基于电子邮件的 IM 即时聊天工具,它利用现有的电子邮件基础设施,将传统收发电子邮件的样式,变为用户熟悉的主流的 IM 使用方式,无需注册,无云数据保存聊天记录,支持所有邮箱互通,所有通信均使用传统邮件协议,内容也保存在你的邮箱中。支持 iOS、Android、Windows、macOS、Linux。github地址:https://github.com/deltachatPS:没有服务端,因原创 2020-06-08 16:26:56 · 4598 阅读 · 0 评论 -
goim编译——bilibili开源聊天室,支持百万用户在线
goim编译——bilibili开源聊天室,支持百万用户在线goim简介基础环境golang环境javakafkaredis编译编译goim编译Discovery安装部署运行测试goim简介官网:https://goim.io/goim是bilibili公司技术总监毛剑创作,使用go语言开发,用于B站生产线上的IM服务框架(聊天室),其框架原理图如下:部署成功后的websocket的demo如下:基础环境golang环境1.下载二进制包:go1.4.linux-amd64.tar.gzw原创 2020-06-04 17:25:31 · 12735 阅读 · 0 评论 -
Go-有些包拉不下来?试试配置goproxy.io代理
go mod从go1.11开始go mod功能,可以很方便的管理依赖了。不过有些包,如:google.golang.org/grpcgolang.org/x/sync因为网络被墙的原因总是拉不下来,我们可以通过设置 GOPROXY 环境变量来解决,具体如下:mac\centos7 设置如下:$ vim ~/.bash_profile# 加入一行export GOPROXY="https://goproxy.io"$ source ~/.bash_profile # 使生效$ go env原创 2020-06-02 15:09:41 · 4259 阅读 · 0 评论 -
微信对话开放平台实战——打造企业智能客服机器人,技能多,免费
微信对话开放平台实战——打造企业智能客服机器人,技能多,免费简介技能商店微信公众号接口开放实战需求分析创建机器人动态查询结果方案HTTP接口申请接口测试关于简介官网:https://openai.weixin.qq.com/微信对话开放平台是以对话交互为核心, 为有客服需求的个人、企业和组织提供智能业务服务与用户管理能力的技能配置平台, 技能开发者可利用我们提供的工具自主完成客服机器人的搭建.技能商店共支持23种技能:聊电影末日生存游戏交通垃圾分类菜谱大学排名翻译快递等……原创 2020-05-19 15:43:12 · 6297 阅读 · 4 评论 -
CICD实战——使用Jenkins实现自动化部署和环境隔离
CICD实战——使用Jenkins实现自动化部署和环境隔离安装jdkjenkins配置构建分发新增SSH Servers发布脚本重新构建关于安装jdk1.查看是否安装了jdk[root@10-0-59-231 data]# java -version # 查看是否安装jdk,没有则要安装-bash: java: 未找到命令2.搜索可用包yum search java |grep -i --color JDK3.安装jdkyum install java-1.8.0-openjdk* #原创 2020-05-18 21:54:55 · 1635 阅读 · 0 评论 -
Xcode11——新建Swift文件修改默认作者和公司名
Xcode11——新建Swift文件修改默认作者和公司名修改作者名修改公司名关于作者新建一个swift文件,默认在文件头生成了如下信息://// File.swift// Coffchat//// Created by xuyingchun on 2020/5/17.// Copyright © 2020 Xuyingchun Inc. All rights reserved.//import Foundation其中 fei.xu 是作者名,Xuyingchun 是公司名。原创 2020-05-17 17:31:18 · 2523 阅读 · 0 评论 -
【转载】最强最全的Java后端知识体系博客推荐 - 无广告,界面清爽,内容全面,泥石流中的一朵青莲
作者:@pdai本文为作者原创,转载请注明出处:https://www.cnblogs.com/pengdai/p/11695098.html最全的Java后端知识体系 https://www.pdai.tech, 每天更新中…。内容目录最全的Java后端知识体系Java基础算法和数据结构Spring相关数据库相关方法论工具清单文档最全的Java后端知识体系Java 全栈知识体系包...转载 2020-05-07 11:26:15 · 537 阅读 · 0 评论 -
Mac下使用icon maker + sketch65制作漂亮的AppIcon,附带下载链接
Mac下使用icon maker + sketch65制作漂亮的AppIcon,附带下载链接sketch制作文字图标挑选制作icon maker推荐几个工具关于作者sketch制作文字图标挑选首先找一个你喜欢的app(比如facebook),然后我们使用sketch+icon maker制作一个ios的appicon。制作制作类似facebook的图标(基于sketch 65)的步骤如...原创 2020-05-05 16:47:03 · 667 阅读 · 0 评论 -
c++日志库实战——spdlog,是不是感觉log4cxx有点笨重,不妨试一试spdlog
c++日志库实战——spdlog,是不是感觉log4cxx有点笨重,不妨试一试spdlog背景spdlog是什么spdlog快速入门常见问题打印行号怎么控制台看不到log同时输出控制台和文件文件按天分割完整代码附录CMakeList.txt关于背景在最近新入职同事的推荐下,作者在一个小工具中学习和使用了spdlog,且已发布到线上运行,以下是学习记录。spdlog是什么Fast C++ ...原创 2020-04-30 16:34:59 · 15787 阅读 · 5 评论 -
golang-进程崩溃后如何输出错误日志?
近期程序线上运行出现了进程崩溃的问题,于是度娘加入了 defer 代码以便打印错误堆栈,运行半天后,发现进程不见了,但是log里面却没有任何错误。于是反复检测,终于找到问题所在。原创 2020-04-21 21:14:44 · 10310 阅读 · 4 评论 -
Swift退出登录功能
Swift退出登录功能在xcode 11.4.1中,除了AppDelegate.swift之外,多了一个SceneDelegate.swift,我使用了UINavigationController()来实现的登录->主界面的跳转。SceneDelegate.swiftclass SceneDelegate: UIResponder, UIWindowSceneDelegate { ...原创 2020-04-19 22:35:26 · 990 阅读 · 0 评论 -
go不定义结构体解析json
go不定义结构体解析json背景simplejson库Interface{}怎么转换成string?背景系统自带的 Json.Marshal / Json.Unmarshal 需要定义一个结构体,json比较简单的时候就很好用,对于以下复杂的类型,就不太合适{ "userInfo":{ "userId":"100021", "deviceCode":"...原创 2020-04-17 14:02:33 · 3617 阅读 · 0 评论 -
转载 - swift 纯代码自定义cell(qq聊天界面)
原文链接:https://blog.youkuaiyun.com/xingyun1992/article/details/51172048文章目录引子开始正文1.导入图片,plist文件,字典转模型2.创建自定义cell 继承UITableViewCell3.提供外部方法设置cell内容和内部控件位置3.计算行高4.重用cell原文引子本人也是初学者,如有错误,请指正~网上大多数都是oc语言的例子,s...转载 2020-03-31 15:03:23 · 1368 阅读 · 0 评论 -
IM开发利器 - 利用免费的对象存储服务实现图片上传和下载
文章目录楔子接下来正文开始创建存储空间表单上传获取upload_tokenGo代码生成(没成功)在线生成使用postman测试上传参考楔子在研究 Go中文网(https://studygolang.com) studygolang的源码时,从它的配置文件中发现了可以免费使用的对象存储服务,可以上传和下载图片,刚好给我自己的开源IM项目提供了补充,值得一用。; 图片存储在七牛云,如果没有可以通...原创 2020-03-30 12:01:03 · 622 阅读 · 0 评论 -
Swift 处理TCP粘包
文章目录Swift 处理TCP粘包CocoaAsyncSocketSwift Data基础写入和读取替换处理TCP粘包释义解决方案实例协议头关于Swift 处理TCP粘包CocoaAsyncSocket如果使用CocoaAsyncSocket来和服务器端进行TCP通信,那么它收发TCP数据包都需要通过Data类型来完成。如下:class IMClient: GCDAsyncSocketDe...原创 2020-03-29 19:41:44 · 1341 阅读 · 1 评论 -
Swift5入门 - 基础语法都给你总结好了 - 花10分钟了解一下?
文章目录Swift语言基础1.1 Swift 和 Playground简介1.2 常量、变量和数据类型数据类型类型安全和类型推断1.3 运算符1.4 控制流程1.5 循环forfor-inwhile1.6 集合数组字典1.7 字符串1.8 函数1.9 枚举1.10 类构造函数和析构属性和方法继承计算属性属性观察器1.11 结构体定义拷贝1.12 协议(接口)1.13 高级可选链和类型转换闭包泛...原创 2020-03-24 12:44:16 · 1737 阅读 · 0 评论 -
swift - iOS系统自带单元测试学习笔记
文章目录背景步骤创建单元测试项目创建单元测试文件写测试代码执行测试删除单元测试项目备注单元测试常用方法其他方法参考背景开发iOS版IM客户端的过程中,经常需要测试SDK的里面的业务逻辑,比如协议头是否正确,需要和服务器通信调试一下。这个时候如果写一个页面,通过按钮点击的方式调用,显得比较多余。所以就想到了swift中如何使用单元测试,特此记录。macos:10.15.3xcode:11.3...原创 2020-03-16 13:48:58 · 510 阅读 · 0 评论 -
Xcode12+MacOS11 SwiftUI安装SwiftFormat格式化代码
前言最近在学习SwiftUI,相比UIKit,代码量更少,支持MVVM模式,有点类似现在前端最流行的Vue/React等框架。但是在Xocde里面,找了半天没找到怎么格式化代码,于是在网上找了个扩展,特此记录。效果格式化前:菜单点击:格式化后:下载MacOS:10.15.3在页面:https://github.com/nicklockwood/SwiftFormat/rel...原创 2020-03-06 11:08:20 · 3298 阅读 · 2 评论 -
go实现Http Server文件服务器,提供上传、下载功能
server.gopackage mainimport ( "fmt" "github.com/prometheus/common/log" "io" "net/http" "os" "strings")func upload(w http.ResponseWriter, req *http.Request) { contentType := req.Header.Get...原创 2020-03-05 11:21:59 · 13015 阅读 · 5 评论 -
【转载】Protobuf原理分析小结
文章目录什么是ProtobufProtobuf消息结构Protobuf优点兼容性好效率高、体积小Varint编码实际例子总结参考资料:https://blog.youkuaiyun.com/zxhoo/article/details/53228303https://blog.youkuaiyun.com/carson_ho/article/details/70568606什么是ProtobufProtobuf是...转载 2020-02-24 11:24:57 · 915 阅读 · 1 评论 -
flutter ios permission_handle权限动态申请
文章目录配置permission_handleAndroid项目IOS项目代码网上都是针对安卓的教程,以下是作者使用Flutter打包在iphone上运行动态申请权限的实战记录。项目在:https://github.com/xmcy0011/CoffeeChat开源IM解决方案,包含服务端(go)和客户端(Flutter)。单聊和机器人(小微、图灵、思知)聊天功能已完成,目前正在研发群聊功...原创 2020-01-27 21:44:58 · 7908 阅读 · 4 评论 -
Golang使用pprof分析cpu占用过高问题
引言某日,需要给云主机添加端口映射时,发现一个核上的CPU使用率100%,后经过初步排除,确定是自己的IM开源项目(im_gate)进程引起,怪不得MAC上电脑很卡。通过度娘后,学习到go 自带pprof可以进行cpu和内存泄漏方面等的分析,经过一顿调查后成功找到了问题,总共耗费不到1个小时,为Golang的生态点赞????????????。我的开源项目在这里:github: https://github...原创 2020-01-11 19:58:14 · 7449 阅读 · 1 评论