Code Monkey home page Code Monkey logo

tangsengdaodaoserver's Introduction

唐僧叨叨

几个老工匠,历时八年时间打造的运营级别的开源即时通讯聊天软件(开源WuKongIM提供通讯动力)

GitHub go.mod Go version (subdirectory of monorepo) Go Report Card License: Apache 2.0

开发环境需要go >=1.20

愿景

让企业轻松拥有自己的即时通讯软件。

动画演示

演示地址

Android扫描体验 iOS扫描体验(商店版本 apple store 搜“唐僧叨叨”)
Web端 Windows端 MAC端 Ubuntun端
点击体验 点击下载 点击下载

app端在登录页面长按标题可以进入手机号登录

演示账号:

账号 密码
15900000002 a1234567
15900000003 a1234567
15900000004 a1234567
15900000005 a1234567
15900000006 a1234567

架构图

架构图

采用大道至简的设计原则,我们尽最大的努力让架构简单化,让开发者上手成本和学习成本大大降低。

我们的架构设计原则:简洁化可扩展性高可用

整个系统分为二层:通讯层(WuKongIM)、业务层(TangSengDaoDao)

通讯层(WuKongIM): 负责长连接维护,消息投递,消息高效存储等等

业务层(TangSengDaoDao): 负责一些业务逻辑,比如:好友关系,群组,朋友圈等等,一些IM相关的业务层的逻辑

通讯层与业务层: WuKongIM会将一些业务层需要的聊天相关的数据通过Webhook的机制(GRPC)推送给TangSengDaoDao,TangSengDaoDao需要投递一些系统消息时,将调用WuKongIM的发送消息的API进行投递。

客户端与服务端: 客户端通过SDK与WuKongIM建立长连接,发送消息和收消息都将通过长连接进行传输,客户端的一些业务逻辑,比如:好友关系,群组,朋友圈等等,将通过调用TangSengDaoDao的API进行处理。

相关源码

唐僧叨叨(负责业务)

项目名 Github地址 Gitee地址 文档 说明
TangSengDaoDaoServer Github Gitee 文档 唐僧叨叨的业务端,负责一些业务逻辑,比如:好友关系,群组,朋友圈等 (通讯端使用的是 WuKongIM)
TangSengDaoDaoAndroid Github Gitee 文档 唐僧叨叨的Android端
TangSengDaoDaoiOS Github Gitee 文档 唐僧叨叨的iOS端
TangSengDaoDaoWeb Github Gitee 文档 唐僧叨叨的Web/PC端
TangSengDaoDaoManager Github Gitee 唐僧叨叨的后台管理系统

悟空IM(负责通讯)

项目名 Github地址 Gitee地址 文档 说明
WuKongIM Github Gitee 文档 悟空IM通讯端,负责长连接维护,消息投递等等
WuKongIMAndroidSDK Github Gitee 文档 悟空IM的Android SDK
WuKongIMiOSSDK Github Gitee 文档 悟空IM的iOS SDK
WuKongIMUniappSDK Github Gitee 文档 悟空IM的 Uniapp SDK
WuKongIMJSSDK Github Gitee 文档 悟空IM的 JS SDK
WuKongIMFlutterSDK Github Gitee 文档 悟空IM的 Flutter SDK
WuKongIMReactNativeDemo Github 悟空IM的 React Native Demo(由贡献者 wengqianshan 提供)

技术文档

唐僧叨叨:

https://tsdaodao.com

悟空IM:

https://githubim.com

功能特性

  • 全局特性
    • 消息永久存储
    • 消息加密传输
    • 消息多端同步(app,web,pc等)
    • 群聊人数无限制
    • 机器人
  • 消息列表
    • 单聊
    • 群聊
    • 发起群聊
    • 添加朋友
    • 扫一扫
    • 列表提醒项,比如消息@提醒,待办提醒,服务器可控
    • 置顶
    • 消息免打扰
    • web登录状态显示
    • 消息搜索
    • 消息输入中
    • 消息未读数
    • 用户标识
    • 无网提示
    • 草稿提醒
  • 消息详情
    • 文本消息
    • 图片消息
    • 语音消息
    • Gif消息
    • 合并转发消息
    • 正在输入消息
    • 自定义消息
    • 撤回消息
    • 群系统消息
    • 群@消息
    • 消息回复
    • 消息转发
    • 消息收藏
    • 消息删除
  • 群功能
    • 添加群成员/移除群成员
    • 群成员列表
    • 群名称
    • 群二维码
    • 群公告
    • 保存到通讯录
    • 我在本群昵称
    • 群投诉
    • 清空群聊天记录
  • 好友
    • 备注
    • 拉黑
    • 投诉
    • 添加/解除好友
  • 通讯录
    • 新的朋友
    • 保存的群
    • 联系人列表
  • 我的
    • 个人信息
    • 新消息通知设置
    • 安全与隐私
    • 通用设置
    • 聊天背景
    • 多语言
    • 黑暗模式
    • 设备管理

Star

我们团队一直致力于即时通讯的研发,需要您的鼓励,如果您觉得本项目对您有帮助,欢迎点个star,您的支持是我们最大的动力。

加入群聊

微信:加群请备注“唐僧叨叨”

许可证

唐僧叨叨 使用 Apache 2.0 许可证。有关详情,请参阅 LICENSE 文件。

tangsengdaodaoserver's People

Contributors

airmole avatar chncaption avatar lttxws avatar no8blackball avatar pittyao avatar tangtaoit avatar yannanfeiff avatar zuoliang0 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tangsengdaodaoserver's Issues

提议:主要贡献者使用GPG签名提交

如题,GPG签名提交能有效防止供应链攻击,防止冒充,而紧箍咒Server目标是企业内部IM,冒充是有利可图的。

如果可以的话,记得上传公钥到密钥服务器,并在readme里注明主要贡献者的密钥指纹。

重启后获取地址变成内网ip了

现象

image docker 获取的都是ws都是内网端口,外网端口都已经打开了,可以登录但是连接不上 开始启动成功了,但是后面重启了一下就成这个样子了

日志

Web端截图

现象

点击截图后是打开了Snipaste的网页,这个下载下来是zip包,可以做到点击截图后调用Snipaste吗?

日志

短信验证问题

现象

更换成阿里云短信后把 tsdd.yaml配置的smsCode值留空 屏蔽都不管用
手机收到阿里云发的验证码 验证还是走smsCode配置的值

是不是除了 tsdd.yaml配置还有别的地方需要关掉

日志

打包的window程序登陆进去状态是断开状态

现象

登陆进去状态是断开状态,应该是websocket 问题,api_url 可通过nginx配置转发到8090,而websocket 前端没有配置地址,这块如何配置可以wss访问的呢?@WuKongIM-作者
image

日志

android端一直处于连接状态

现象

android登录后,一直在循环请求http://117.185.56.42:18090/v1/users/5cbe4033e5764322b62f4b1b536240f7/im 和websocket连接tcp,连接成功 解析失败,连接断开流程。端口内部映射 18090 - 8090 15100-5100

日志

2023-08-03 12:12:44.465 24802-24983/? E/WKLoggerV1.0.0: [xNbcPool-1-thread-1(119): SourceFile:52] - 连接成功
2023-08-03 12:12:44.535 24802-24983/? E/WKLoggerV1.0.0: [xNbcPool-1-thread-1(119): SourceFile:123] - 是否不存储:0是否显示红点:1是否只同步一次:1
2023-08-03 12:12:44.535 24802-24983/? E/WKLoggerV1.0.0: [xNbcPool-1-thread-1(119): SourceFile:140] - 消息包类型2
2023-08-03 12:12:44.536 24802-24983/? E/WKLoggerV1.0.0: [xNbcPool-1-thread-1(119): SourceFile:17] - IM连接返回状态:0
2023-08-03 12:12:44.536 24802-24983/? E/WKLoggerV1.0.0: [xNbcPool-1-thread-1(119): SourceFile:295] - sdk解析登录返回错误类型:0
2023-08-03 12:12:44.537 24802-24983/? E/WKLoggerV1.0.0: [xNbcPool-1-thread-1(119): SourceFile:23] - 开始计算IP请求时间
2023-08-03 12:12:44.537 24802-24983/? E/WKLoggerV1.0.0: [xNbcPool-1-thread-1(119): SourceFile:9] - 获取IP中...
2023-08-03 12:12:44.537 24802-24983/? E/WKLoggerV1.0.0: [xNbcPool-1-thread-1(119): SourceFile:123] - 是否不存储:0是否显示红点:0是否只同步一次:0
2023-08-03 12:12:44.538 24802-24983/? E/WKLoggerV1.0.0: [xNbcPool-1-thread-1(119): SourceFile:140] - 消息包类型2
2023-08-03 12:12:44.538 24802-24983/? E/WKLoggerV1.0.0: [xNbcPool-1-thread-1(119): SourceFile:17] - IM连接返回状态:0
2023-08-03 12:12:44.538 24802-24983/? E/WKLoggerV1.0.0: [xNbcPool-1-thread-1(119): SourceFile:295] - sdk解析登录返回错误类型:0
2023-08-03 12:12:44.539 24802-24983/? E/WKLoggerV1.0.0: [xNbcPool-1-thread-1(119): SourceFile:23] - 开始计算IP请求时间
2023-08-03 12:12:44.539 24802-24983/? E/WKLoggerV1.0.0: [xNbcPool-1-thread-1(119): SourceFile:9] - 获取IP中...
2023-08-03 12:12:44.539 24802-24983/? E/WKLoggerV1.0.0: [xNbcPool-1-thread-1(119): SourceFile:123] - 是否不存储:0是否显示红点:0是否只同步一次:0
2023-08-03 12:12:44.540 24802-24983/? E/WKLoggerV1.0.0: [xNbcPool-1-thread-1(119): SourceFile:140] - 消息包类型2
2023-08-03 12:12:44.540 24802-24983/? E/WKLoggerV1.0.0: [xNbcPool-1-thread-1(119): SourceFile:17] - IM连接返回状态:0
2023-08-03 12:12:44.540 24802-24983/? E/WKLoggerV1.0.0: [xNbcPool-1-thread-1(119): SourceFile:295] - sdk解析登录返回错误类型:0
2023-08-03 12:12:44.541 24802-24983/? E/WKLoggerV1.0.0: [xNbcPool-1-thread-1(119): SourceFile:23] - 开始计算IP请求时间
2023-08-03 12:12:44.542 24802-24983/? E/WKLoggerV1.0.0: [xNbcPool-1-thread-1(119): SourceFile:9] - 获取IP中...
2023-08-03 12:12:44.542 24802-24983/? E/WKLoggerV1.0.0: [xNbcPool-1-thread-1(119): SourceFile:123] - 是否不存储:1是否显示红点:1是否只同步一次:1
2023-08-03 12:12:44.542 24802-24983/? E/WKLoggerV1.0.0: [xNbcPool-1-thread-1(119): SourceFile:140] - 消息包类型6
2023-08-03 12:12:44.542 24802-24983/? E/WKLoggerV1.0.0: [xNbcPool-1-thread-1(119): SourceFile:992] - 解析协议类型失败--->:6
2023-08-03 12:12:44.542 24802-24983/? E/WKLoggerV1.0.0: [xNbcPool-1-thread-1(119): SourceFile:123] - 是否不存储:1是否显示红点:0是否只同步一次:1
2023-08-03 12:12:44.543 24802-24983/? E/WKLoggerV1.0.0: [xNbcPool-1-thread-1(119): SourceFile:140] - 消息包类型6
2023-08-03 12:12:44.543 24802-24983/? E/WKLoggerV1.0.0: [xNbcPool-1-thread-1(119): SourceFile:5] - 连接断开

如何修改配置文件?

比如web端的聊天室名字。

开启关闭文件助手。

通用设置内,企业功能点击后程序崩溃重启。

希望能开放讨论区

如题,这个项目很不错,希望能开 github repo 讨论,方便大家交流经验。

希望添加卡片消息支持

通过阅读文档,自定义消息需要自己实现,包括各端的显示渲染,这成本太大了,得会三端的开发语言。能不能官方出一个类似于微信的那种卡片消息,发送信息只需要发送对应的模板信息,其他链接、标题、图片、按钮等内容就按照设定好的卡片消息渲染。

sql优化

现象

func (m *managerDB) queryMsgExtrWithMsgIds(msgIds []int64) ([]*messageExtraModel, error) {
var list []messageExtraModel
_, err := m.session.Select("
").From("message_extra").Where("message_id in ?", msgIds).Load(&list)
return list, err
}

类型转换导致索引失效
当条件表达式的数据类型不同时,在查询执行过程中会进行一些隐式的数据类型转换。类型转换有时会应用于条件中的常量,有时会应用于条件中的列。当在列上应用类型转换时,在查询执行期间无法使用索引,可能导致严重的性能问题。

日志

select *
from tangseng.message_extra
where message_extra.message_id in (12332131231231231231)

PawSQL 建议修改为

select *
from tangseng.message_extra
where message_extra.message_id in ('12332131231231231231')

代码中诸如此类sql导致索引失效,如果信息量过多引起mysql严重性能问题

使用docker-compose 部署服务报错,数据库连接错误

现象

tsdd-tangsengdaodaoserver-1 | panic: dial tcp 192.168.224.8:3306: connect: connection refused

然后测试添加好友也不能加了

日志

register......
tsdd-wukongim-1 | [GIN] 2023/10/13 - 23:35:32 | 200 | 3.45653ms | 192.168.224.10 | POST "/user/token"
tsdd-tangsengdaodaoserver-1 | panic: dial tcp 192.168.224.8:3306: connect: connection refused
tsdd-tangsengdaodaoserver-1 |
tsdd-tangsengdaodaoserver-1 | goroutine 1 [running]:
tsdd-tangsengdaodaoserver-1 | main.runAPI(0xc0002ccc00)
tsdd-tangsengdaodaoserver-1 | /go/release/main.go:95 +0x1d5
tsdd-tangsengdaodaoserver-1 | main.main()
tsdd-tangsengdaodaoserver-1 | /go/release/main.go:70 +0x3ed
tsdd-mysql-1 | 2023-10-13T15:35:32.587981Z 0 [Warning] [MY-010918] [Server] 'default_authentication_plugin' is deprecated and will be removed in a future release. Please use authentication_policy instead.
tsdd-mysql-1 | 2023-10-13T15:35:32.588016Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.27) starting as process 1
tsdd-mysql-1 | 2023-10-13T15:35:32.593107Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
tsdd-mysql-1 | 2023-10-13T15:35:32.603044Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.

链接不上数据库

现象

ERROR 1045 (28000): Access denied for user 'root'@'ip' (using password: YES)

日志

f9e7f43e540dbf4f21998e9e62b6f5b
image

docker-compose方式启动,数据库默认编码为latin1,导致server初始化数据库失败,无法启动

现象

docker-compose方式启动,数据库默认编码为latin1,导致server初始化数据库失败,无法启动

日志

tangsengdaodaoserver_1 | register......
tangsengdaodaoserver_1 | panic: Error 1366 (HY000): Incorrect string value: '\xE5\x9F\xBA\xE7\xA1\x80...' for column 'name' at row 1 handling common-20230203-01.sql
tangsengdaodaoserver_1 |
tangsengdaodaoserver_1 | goroutine 1 [running]:
tangsengdaodaoserver_1 | main.runAPI(0xc0002f2b00)
tangsengdaodaoserver_1 | /go/release/main.go:95 +0x1d5
tangsengdaodaoserver_1 | main.main()
tangsengdaodaoserver_1 | /go/release/main.go:70 +0x3ed
mysql_1 | 2023-11-09T05:34:12.190718Z 2 [Note] Aborted connection 2 to db: 'im' user: 'root' host: '172.22.0.8' (Got an error reading communication packets)

tangsengdaodaoserver_1 | register......
tangsengdaodaoserver_1 | panic: Error 1050 (42S01): Table 'app_module' already exists handling common-20230203-01.sql
tangsengdaodaoserver_1 |
tangsengdaodaoserver_1 | goroutine 1 [running]:
tangsengdaodaoserver_1 | main.runAPI(0xc0001e0a00)
tangsengdaodaoserver_1 | /go/release/main.go:95 +0x1d5
tangsengdaodaoserver_1 | main.main()
tangsengdaodaoserver_1 | /go/release/main.go:70 +0x3ed

解决方式

在启动数据库的时候增加默认编码参数
mysql: # mysql数据库
image: mysql
command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

(TangSengDaoDaoWeb)windows版本build后无法正常访问自行部署的HTTP后台

修改index.tsx
if(process.env.NODE_ENV === "development") {
WKApp.apiClient.config.apiURL = "http://10.113.3.77:8090/v1/"
}else {
// WKApp.apiClient
WKApp.apiClient.config.apiURL = "http://10.113.3.77:8090/v1/";
}

现象

  1. yarn dev 网页访问后台正常
  2. yarn build后 liveserver启动网页访问后台正常
  3. yarn tauri dev windows程序访问后台正常
  4. yarn tauri build,安装后程序访问后台异常
  5. 修改为官方https api,WKApp.apiClient.config.apiURL = "https://api.botgate.cn/v1/"修改后 重新 yarn tauri build,安装后程序访问官方后台正常

日志

axios.interceptors.response.use 中报错 Nerwork Error

修改登录密码

修改密码能否更改为输入原密码,然后再输入新密码。这样大家就可以自行修改了。
默认的验证码都是一样的,如果告诉大家的话那么所有人都能随意修改手机号了。

关于音视频,性能等问题

文档

希望官方能够有像腾讯云IM服务那种不同客户端SDK文档,例如“含UI集成方案”和”不含UI集成方案“的客户端SDK文档;

Flutter

官方有计划推出Flutter的SDK吗?如果有,大概什么时间可以出炉呢?

音视频

现在官方有计划推出类似像腾讯会议类似的服务,最好可以直接集成在群聊中

服务

IM服务的性能如何?支持集群部署吗?如何保证高可用?IM消息存储?群聊最多支持多人加入?人多之后会有哪些比较大的影响,希望能在官方文档中有一个详细的说明

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.