同步操作将从 bzGhost/bzGhost 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
支持所有端的聊天软件,高仿微信,支持文字红包 聊天 ,支持群组建群等功能。全端支持。 bzGhost 打造跨终端跨平台即时通讯,个人也能玩的转的聊天软件。 chatGpt聊天功能,AI客服。
软件遵循MIT开源协议,意味着您无需支付任何费用,也无需授权,即可将 软件应用到您的产品中。
注意:这并不意味着您可以将软件应用到非法的领域,比如涉及赌博、色情、暴力、宗教等方面。
如因此产生纠纷等法律问题, 作者不承担任何责任。切勿以身试法!!! 网络不是法外之地
1.群组(创建群组,拉人,踢人,禁言,群红包,) 2.私聊 (转账,图片,文字,语音,视频,文件,表情) 3.红包(抢红包,运气红包,口冷红包) 4.通讯录 5.朋友圈 (点赞,评论) 6.商城 (商品列表,商品购买,商品下单) 7.订单 (商品订单,已经支付,完成订单等) 8.客服
**注意: 管理员账号:admin / 123456
测试账号:18767176707 / 123456
技术 | 说明 | 官网 |
---|---|---|
Electron | Electron基于Chromium和Node.js | https://www.electronjs.org/ |
uni-app | 使用Vue.js开发手机端应用的框架 | https://uniapp.dcloud.io/ |
Netty | 网络应用程序框架 | https://netty.io/ |
Spring Boot | 核心框架 | https://spring.io/projects/spring-boot/ |
MyBatis | 持久层 | https://mybatis.org/mybatis-3/zh/index.html |
Redis | 缓存 | https://redis.io/ |
Maven | 项目构建 | https://maven.apache.org/ |
Mysql | 数据库 | https://www.mysql.com/ |
Uview | 兼容uni-app | https://www.uviewui.com/ |
iView | Vue高质量组件库 | http://v1.iviewui.com/ |
Ignite | 以内存为中心的分布式数据库 | https://ignite.apache.org/ |
Zookeeper | 中心节点 | https://zookeeper.apache.org/ |
tkmybatis | TKMybatis 是基于 Mybatis 框架开发的一个工具 |
会将各个版本的演示在此展示,目前演示的版本有安卓,电脑,后台管理,其他版本演示将会陆续添加
链接 | 语言 | 版本 | 开源 |
---|---|---|---|
后台管理 | Element | 1.0.0 | 100% |
安卓端 | Uniapp | 1.0.0 | 100% |
电脑端 | Electron | 1.0.0 | 100% |
API | Java | 1.0.0 | 100% |
**注意:
管理员账号:admin /123456
测试账号:test/123456
代码结构介绍
api-dock 接口文档
imApi 后端接口代码
core 业务核心
framework 框架
hnapay 支持
portal 权限
imSocket 后端通信代码
vue-admin 后端前端代码
vue-app 手机端代码
首次启动注意事项:
导入sql 到数据库 ,创建两个库名.
https://gitee.com/Huiyun-Co/yiqun.git
http://42.193.146.14:9998/swagger-ui.html#/
bzGhost IM 是专门为Web前端开发者打造的IM产品,致力于打造一款天生支持H5、Uniapp和各种小程序,集成简单、高性价比,功能全面、安全可靠的IM。
bzGhost IM可以帮助Web前端开发者快速实现私聊、群聊、在线客服等各种场景的IM功能
场景分类 | 场景 |
---|---|
平台互动 | 站内私信 医患沟通 在线招聘 游戏互动 家校交流 线上课堂 |
政企办公 | 政府办公交流 企业工作沟通 |
社交沟通 | 兴趣社群 婚恋交友 校园交友 私密交友 |
在线客服 | 电商沟通 用户咨询 技术支持 |
支持发送文字、表情、图片、语音、和视频消息,也支持开发者根据业务需求实现类似于医生处方、电商订单以及红包等自定义类型消息的发送。
实时显示最近沟通过的私聊或者群聊会话信息,包括每个会话的未读消息数、最后一条消息的时间和内容,支持会话置顶或会话删除。
在任何设备上均可同步拉取云端消息历史记录,支持消息撤回、删除操作。也可以通过Webhook调用开发者设置的回调地址,将消息同步至指定服务器。
如果用户不在线或网络不稳定,当用户重新上线,系统将自动补发离线期间的消息。
对于微信小程序、Uniapp开发的App,当应用在后台运行或进程被杀掉时,支持通过微信公众号模板消息或手机通知栏推送提醒用户,BzGhost已集成所有主流手机厂商通道:苹果iOS(APNs)、华为、小米、OPPO、VIVO、魅族和Google FCM。
支持消息发送方查看消息的已读状态,了解接收方是否已阅读该条消息。
支持同一用户的消息在多个不同设备(app、小程序和网页)之间保持实时同步,支持一个用户最多8个设备同时在线。
优势 | 描述 |
---|---|
集成简单 | 傻瓜式API, 最快半天集成! |
高性价比 | 一次性付费,终身买断。 |
一对一技术支持 | 技术人员在线提供1对1技术支持(周一至周五), 紧急事务7 X 24小时电话技术支持 |
性能卓越 | 海量用户同时在线, 每秒千万级消息实时必达! |
安全私密 | 独创bzGhost OTP技术结合HTTPS,确保您的数据私密传输 |
健壮可靠 | 跨区多活灾备,自动水平扩展,99.95%高可用承诺,完美应对爆发式活动支持 |
报文格式:magic4字节 + 版本1字节 + 序列化算法1字节 + 指令1字节 + 数据长度4字节 + 数据内容总字节长度 = 11 + 数据内容长度
let dataView = new DataView(buffer)
dataView.setInt32(0, 0x12345678)
dataView.setInt8(4, packet.version)
dataView.setInt8(5, 1) // 写死1表示json序列化
dataView.setInt8(6, packet.command)
dataView.setInt32(7, bytes.length)
for (let i = 11; i < bytes.length + 11; i++) {
dataView.setUint8(i, bytes[i - 11])
}
let dataView = new DataView(buffer)
let lenght = dataView.getInt32(7)
let bytes = []
for (let i = 11; i < lenght + 11; i++) {
bytes[i - 11] = dataView.getUint8(i)
}
方法名 login
参数说明
属性名 | 备注 | 类型 | 可选值 |
---|---|---|---|
userId | 用户唯一标识 | String | 5f6d9d98 |
groupIds | 群组ids | Array | ["",""] |
command | 指令集 | Number | 1 |
version | 版本号 | Number | 1 |
import webim from '@/util/socket/webim.js';
// 全局初始化
webim.initSocket();
webim.login(userId, groupIds ,command, version, res=>{
//输出res
});
let packet = {
version:1,
command: 1,
userId:"5f6d9d98",
groupIds:["dasdasdsa"]
}
let packet = {
version : 1,
command: 2,
errorMsg:"",
success: true
}
属性名 | 备注 | 类型 | 可选值 |
---|---|---|---|
isItMe | 发送人 | Boolen | false/true |
contentType | 消息类型(文字/图片/语音/视频/红包) | Number | 0/1/2/3/4/5 |
content | 消息内容 | String | 测试 |
createTime | 创建时间 | Date | 2021-11-2 |
hasBeenSentId | 消息id | String | 1447565 |
fromUserId | 发送人id | String | 220e805b8521444e9f27d78e45633b44 |
fromUserName | 发送人账户 | String | test |
fromUserHeadImg | 发送人图像 | String | defalut.jpg |
userId | 当前用户id | String | 5f6d9d98 |
toUserId | 接收人id | String | 5f6d9d98 |
toUserName | 接收人账户 | String | admin |
toUserHeadImg | 接收人图像 | String | defalut.jpg |
chatType | 聊天类型(群/私) | Number | 1/0 |
version | 版本 | Number | 1 |
command | 指令集 | Number | 3 |
let packet = {
isItMe: true,
contentType: 0,
content: "测试",
createTime: Date.now(),
hasBeenSentId: Date.now(),
fromUserId: "5f6d9d98",
fromUserName: "admin",
fromUserHeadImg: '/static/image/huge.jpg',
userId: "5f6d9d98",
toUserId: "220e805b8521444e9f27d78e45633b44",
toUserName: "test",
toUserHeadImg:'/static/image/huge.jpg',
chatType: 0,
version : 1,
command: 3,
};
let packet = {
isItMe: true,
contentType: 0,
content: "测试",
createTime: Date.now(),
hasBeenSentId: Date.now(),
fromUserId: "5f6d9d98",
fromUserName: "admin",
fromUserHeadImg: '/static/image/huge.jpg',
userId: "5f6d9d98",
toUserId: "220e805b8521444e9f27d78e45633b44",
toUserName: "test",
toUserHeadImg:'/static/image/huge.jpg',
chatType: 0,
version : 1,
command: 4,
};
指令集 | 备注 |
---|---|
1 | 用户绑定请求 |
2 | 用户绑定响应 |
3 | 发送消息请求 |
4 | 发送消息响应 |
封装uni方法
初始化创建一个websocket连接
options参数说明
参数名 | 类型 | 说明 |
---|---|---|
url | String | 服务器地址ws://协议 |
success | Function | 接口调用成功回调函数 |
fail | Function | 接口调用失败回调函数 |
示例代码
WEBIM.options = {
url: 'ws://127.0.0.1',
success(res) {
resolve(res);
},
fail(e) {
reject(e);
}
}
WEBIM.server.initWebSocket(WEBIM.options);
通过 WebSocket 连接发送数据,需要先 initWebSocket,并在 _onSocketOpened回调之后才能发送
options参数说明
属性 | 类型 | 说明 |
---|---|---|
data | ArrayBuffer | 服务器发送消息 encode编码 |
success | Function | 成功回调函数 |
fail | Function | 失败回调函数 |
示例代码
WEBIM.server.sendWebSocketMsg({
data: arrayBuffer,
success(res) {},
fail(err) {
// 进行重连
WEBIM.server._isLogin = false;
if (WEBIM.server._isReconnection) {
console.log('网络中断,尝试重连')
WEBIM.options = {
url: WEBIM.serverUrl,
success(res) {},
fail(err) {}
}
WEBIM.server._reConnect(WEBIM.options)
}
console.log('【websocket】发送失败,尝试手动重连')
}
});
监听WebSocket接受到服务器的消息事件。
CALLBACK 返回参数
属性 | 类型 | 说明 |
---|---|---|
callBack | ArrayBuffer | 服务器返回消息数据 decode解码 |
示例代码
WEBIM.server.onReceivedMsg(event => {
let packet = packetCode.decode(event.data);
let command = packet.command;
// 转发事件
eventDispatcher.dispatchEvent(command, toJSON(packet))
eventDispatcher.removeListener(command, toJSON(packet))
if(command === -10){
store.commit('setNewsPush', packet);
}
});
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
charset utf-8;
location / {
root /home/xxxxx//dist;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /prod-api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:9998/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。