add http and websocket

This commit is contained in:
xyz
2025-06-10 20:17:39 +08:00
parent 030b5d6101
commit 68cd53a80c
23 changed files with 650 additions and 171 deletions

View File

@ -1,5 +1,6 @@
syntax = "proto3";
package bite_im;
option cc_generic_services = true;
//用户信息结构
@ -13,14 +14,11 @@ message UserInfo {
//聊天会话信息
message ChatSessionInfo {
//群聊会话不需要设置,单聊会话设置为对方用户ID
optional string single_chat_friend_id = 1;
optional string single_chat_friend_id = 1;//群聊会话不需要设置单聊会话设置为对方ID
string chat_session_id = 2; //会话ID
string chat_session_name = 3;//会话名称git
//会话上一条消息,新建的会话没有最新消息
optional MessageInfo prev_message = 4;
//会话头像 --群聊会话不需要,直接由前端固定渲染,单聊就是对方的头像
optional bytes avatar = 5;
optional MessageInfo prev_message = 4;//会话上一条消息,新建的会话没有最新消息
optional bytes avatar = 5;//会话头像 --群聊会话不需要,直接由前端固定渲染,单聊就是对方的头像
}
//消息类型
@ -34,23 +32,18 @@ message StringMessageInfo {
string content = 1;//文字聊天内容
}
message ImageMessageInfo {
//图片文件id,客户端发送的时候不用设置由transmit服务器进行设置后交给storage的时候设置
optional string file_id = 1;
//图片数据在ES中存储消息的时候只要id不要文件数据, 服务端转发的时候需要原样转发
optional bytes image_content = 2;
optional string file_id = 1;//图片文件id,客户端发送的时候不用设置由transmit服务器进行设置后交给storage的时候设置
optional bytes image_content = 2;//图片数据在ES中存储消息的时候只要id不要文件数据, 服务端转发的时候需要原样转发
}
message FileMessageInfo {
optional string file_id = 1;//文件id,客户端发送的时候不用设置
optional int64 file_size = 2;//文件大小
optional string file_name = 3;//文件名称
//文件数据在ES中存储消息的时候只要id和元信息不要文件数据, 服务端转发的时候也不需要填充
optional bytes file_contents = 4;
int64 file_size = 2;//文件大小
string file_name = 3;//文件名称
optional bytes file_contents = 4;//文件数据在ES中存储消息的时候只要id和元信息不要文件数据, 服务端转发的时候也不需要填充
}
message SpeechMessageInfo {
//语音文件id,客户端发送的时候不用设置
optional string file_id = 1;
//文件数据在ES中存储消息的时候只要id不要文件数据, 服务端转发的时候也不需要填充
optional bytes file_contents = 2;
optional string file_id = 1;//语音文件id,客户端发送的时候不用设置
optional bytes file_contents = 2;//文件数据在ES中存储消息的时候只要id不要文件数据, 服务端转发的时候也不需要填充
}
message MessageContent {
MessageType message_type = 1; //消息类型
@ -70,13 +63,18 @@ message MessageInfo {
MessageContent message = 5;
}
message Message {
string request_id = 1;
MessageInfo message = 2;
}
message FileDownloadData {
string file_id = 1;
bytes file_content = 2;
}
message FileUploadData {
string file_name = 1; //文件名称
int64 file_size = 2; //文件大小
bytes file_content = 3; //文件数据
string file_name = 1;
int64 file_size = 2;
bytes file_content = 3;
}

View File

@ -1,9 +1,16 @@
/*
文件操作服务器的子服务注册信息: /service/file/instance_id
服务名称:/service/file
实例ID: instance_id 每个能够提供用户操作服务的子服务器唯一ID
当服务发现的时候,通过 /service/file 进行服务发现,就可以发现所有的能够提供用户操作的实例信息了
*/
syntax = "proto3";
package bite_im;
import "base.proto";
option cc_generic_services = true;
message GetSingleFileReq {
string request_id = 1;
string file_id = 2;
@ -14,7 +21,7 @@ message GetSingleFileRsp {
string request_id = 1;
bool success = 2;
string errmsg = 3;
optional FileDownloadData file_data = 4;
FileDownloadData file_data = 4;
}
message GetMultiFileReq {
@ -27,11 +34,11 @@ message GetMultiFileRsp {
string request_id = 1;
bool success = 2;
string errmsg = 3;
map<string, FileDownloadData> file_data = 4;//文件ID与文件数据的映射map
repeated FileDownloadData file_data = 4;
}
message PutSingleFileReq {
string request_id = 1; //请求ID作为处理流程唯一标识
string request_id = 1;
optional string user_id = 2;
optional string session_id = 3;
FileUploadData file_data = 4;
@ -40,7 +47,7 @@ message PutSingleFileRsp {
string request_id = 1;
bool success = 2;
string errmsg = 3;
FileMessageInfo file_info = 4; //返回了文件组织的元信息
FileMessageInfo file_info = 4;
}
message PutMultiFileReq {
@ -61,4 +68,4 @@ service FileService {
rpc GetMultiFile(GetMultiFileReq) returns (GetMultiFileRsp);
rpc PutSingleFile(PutSingleFileReq) returns (PutSingleFileRsp);
rpc PutMultiFile(PutMultiFileReq) returns (PutMultiFileRsp);
}
}

View File

@ -1,30 +1,37 @@
/*
好友操作服务器的子服务注册信息: /service/friend/instance_id
服务名称:/service/friend
实例ID: instance_id 每个能够提供用户操作服务的子服务器唯一ID
当服务发现的时候,通过 /service/friend 进行服务发现,就可以发现所有的能够提供用户操作的实例信息了
*/
syntax = "proto3";
package bite_im;
import "base.proto";
option cc_generic_services = true;
//--------------------------------------
//好友列表获取
message GetFriendListReq {
string request_id = 1; // 请求标识ID
optional string user_id = 2; // 当前请求的发起者用户ID
optional string session_id = 3; //登录会话ID--用于网关进行身份识别--其他子服务用不到
string request_id = 1;
optional string user_id = 2;
optional string session_id = 3;
}
message GetFriendListRsp {
string request_id = 1;
bool success = 2;
string errmsg = 3;
repeated UserInfo friend_list = 4; //要返回的用户信息
repeated UserInfo friend_list = 4;
}
//--------------------------------------
//好友删除
message FriendRemoveReq {
string request_id = 1;
optional string user_id = 2; //当前用户ID
optional string user_id = 2;
optional string session_id = 3;
string peer_id = 4; //要删除的好友ID
string peer_id = 4;
}
message FriendRemoveRsp {
string request_id = 1;
@ -53,15 +60,14 @@ message FriendAddProcessReq {
bool agree = 3;//是否同意好友申请
string apply_user_id = 4; //申请人的用户id
optional string session_id = 5;
optional string user_id = 6; // 被申请人
optional string user_id = 6;
}
// +++++++++++++++++++++++++++++++++
message FriendAddProcessRsp {
string request_id = 1;
bool success = 2;
string errmsg = 3;
// 同意后会创建会话,向网关返回会话信息,用于通知双方会话的建立,这个字段客户端不需要关注
optional string new_session_id = 4;
optional string new_session_id = 4; // 同意后会创建会话,向网关返回会话信息,用于通知双方会话的建立,这个字段客户端不需要关注
}
//--------------------------------------
//获取待处理的,申请自己好友的信息列表
@ -72,7 +78,7 @@ message GetPendingFriendEventListReq {
}
message FriendEvent {
optional string event_id = 1;
string event_id = 1;
UserInfo sender = 3;
}
message GetPendingFriendEventListRsp {

View File

@ -1,11 +1,39 @@
syntax = "proto3";
package bite_im;
option cc_generic_services = true;
/*
消息推送使用websocket长连接进行
websocket长连接转换请求ws://host:ip/ws
长连建立以后,需要客户端给服务器发送一个身份验证信息
*/
message ClientAuthenticationReq {
string request_id = 1;
string session_id = 2; // 用于向服务器表明当前长连接客户端的身份
string session_id = 2;
}
message ClientAuthenticationRsp {
string request_id = 1;
bool success = 2;
string errmsg = 3;
}
//通信接口统一采用POST请求实现,正文采用protobuf协议进行组织
/*
HTTP HEADER
POST /service/xxxxx
Content-Type: application/x-protobuf
Content-Length: 123
xxxxxx
-------------------------------------------------------
HTTP/1.1 200 OK
Content-Type: application/x-protobuf
Content-Length: 123
xxxxxxxxxx
*/
//在客户端与网关服务器的通信中使用HTTP协议进行通信
// 通信时采用POST请求作为请求方法
@ -50,4 +78,4 @@ message ClientAuthenticationReq {
语音转文字 /service/speech/recognition
}
*/
*/

View File

@ -1,3 +1,9 @@
/*
/service/message_storage/instance_id
/service/message_storage
ID: instance_id ID
/service/message_storage
*/
syntax = "proto3";
package bite_im;
import "base.proto";
@ -52,4 +58,5 @@ service MsgStorageService {
rpc GetHistoryMsg(GetHistoryMsgReq) returns (GetHistoryMsgRsp);
rpc GetRecentMsg(GetRecentMsgReq) returns (GetRecentMsgRsp);
rpc MsgSearch(MsgSearchReq) returns (MsgSearchRsp);
}

View File

@ -0,0 +1,39 @@
/*
消息转发服务器的子服务注册信息: /service/message_transmit/instance_id
服务名称:/service/message_transmit
实例ID: instance_id 每个能够提供用户操作服务的子服务器唯一ID
当服务发现的时候,通过 /service/message_transmit 进行服务发现,就可以发现所有的能够提供用户操作的实例信息了
*/
//消息转发服务器接口
syntax = "proto3";
package bite_im;
import "base.proto";
option cc_generic_services = true;
//这个用于和网关进行通信
message NewMessageReq {
string request_id = 1;
optional string user_id = 2;
optional string session_id = 3;
string chat_session_id = 4;
MessageContent message = 5;
}
message NewMessageRsp {
string request_id = 1;
bool success = 2;
string errmsg = 3;
}
//这个用于内部的通信,生成完整的消息信息,并获取消息的转发人员列表
message GetTransmitTargetRsp {
string request_id = 1;
bool success = 2;
string errmsg = 3;
MessageInfo message = 4;
repeated string target_id_list = 5;
}
service MsgTransmitService {
rpc GetTransmitTarget(NewMessageReq) returns (GetTransmitTargetRsp);
}

43
proto/notify.proto Normal file
View File

@ -0,0 +1,43 @@
syntax = "proto3";
package bite_im;
import "base.proto";
option cc_generic_services = true;
enum NotifyType {
FRIEND_ADD_APPLY_NOTIFY = 0;
FRIEND_ADD_PROCESS_NOTIFY = 1;
CHAT_SESSION_CREATE_NOTIFY = 2;
CHAT_MESSAGE_NOTIFY = 3;
FRIEND_REMOVE_NOTIFY = 4;
}
message NotifyFriendAddApply {
UserInfo user_info = 1; //申请人信息
}
message NotifyFriendAddProcess {
bool agree = 1;
UserInfo user_info = 2; //处理人信息
}
message NotifyFriendRemove {
string user_id = 1; //删除自己的用户ID
}
message NotifyNewChatSession {
ChatSessionInfo chat_session_info = 1; //新建会话信息
}
message NotifyNewMessage {
MessageInfo message_info = 1; //新消息
}
message NotifyMessage {
optional string notify_event_id = 1;//通知事件操作id有则填无则忽略
NotifyType notify_type = 2;//通知事件类型
oneof notify_remarks { //事件备注信息
NotifyFriendAddApply friend_add_apply = 3;
NotifyFriendAddProcess friend_process_result = 4;
NotifyFriendRemove friend_remove = 7;
NotifyNewChatSession new_chat_session_info = 5;//会话信息
NotifyNewMessage new_message_info = 6;//消息信息
}
}

View File

@ -1,23 +0,0 @@
syntax = "proto3";
package bite_im;
option cc_generic_services = true;
message SpeechRecognitionReq {
string request_id = 1; //请求ID
bytes speech_content = 2; //语音数据
optional string user_id = 3; //用户ID
optional string session_id = 4; //登录会话ID -- 网关进行身份鉴权
}
message SpeechRecognitionRsp {
string request_id = 1; //请求ID
bool success = 2; //请求处理结果标志
optional string errmsg = 3; //失败原因
optional string recognition_result = 4; //识别后的文字数据
}
//语音识别Rpc服务及接口的定义
service SpeechService {
rpc SpeechRecognition(SpeechRecognitionReq) returns (SpeechRecognitionRsp);
}

View File

@ -0,0 +1,28 @@
/*
语音识别服务器的子服务注册信息: /service/speech/instance_id
服务名称:/service/speech
实例ID: instance_id 每个能够提供用户操作服务的子服务器唯一ID
当服务发现的时候,通过 /service/speech 进行服务发现,就可以发现所有的能够提供用户操作的实例信息了
*/
syntax = "proto3";
package bite_im;
option cc_generic_services = true;
message SpeechRecognitionReq {
string request_id = 1;
bytes speech_content = 2;
optional string user_id = 3;
optional string session_id = 4;
}
message SpeechRecognitionRsp {
string request_id = 1;
bool success = 2;
string errmsg = 3;
string recognition_result = 4;
}
service SpeechService {
rpc SpeechRecognition(SpeechRecognitionReq) returns (SpeechRecognitionRsp);
}

View File

@ -1,32 +0,0 @@
syntax = "proto3";
package bite_im;
import "base.proto";
option cc_generic_services = true;
//这个用于和网关进行通信
message NewMessageReq {
string request_id = 1; //请求ID -- 全链路唯一标识
optional string user_id = 2;
optional string session_id = 3;//客户端身份识别信息 -- 这就是消息发送者
string chat_session_id = 4; //聊天会话ID -- 标识了当前消息属于哪个会话,应该转发给谁
MessageContent message = 5; // 消息内容--消息类型+内容
}
message NewMessageRsp {
string request_id = 1;
bool success = 2;
string errmsg = 3;
}
//这个用于内部的通信,生成完整的消息信息,并获取消息的转发人员列表
message GetTransmitTargetRsp {
string request_id = 1;
bool success = 2;
string errmsg = 3;
MessageInfo message = 4; // 组织好的消息结构 --
repeated string target_id_list = 5; //消息的转发目标列表
}
service MsgTransmitService {
rpc GetTransmitTarget(NewMessageReq) returns (GetTransmitTargetRsp);
}

View File

@ -1,6 +1,13 @@
/*
用户操作服务器的子服务注册信息: /service/user/instance_id
服务名称:/service/user
实例ID: instance_id 每个能够提供用户操作服务的子服务器唯一ID
当服务发现的时候,通过 /service/user 进行服务发现,就可以发现所有的能够提供用户操作的实例信息了
*/
syntax = "proto3";
package bite_im;
import "base.proto";
option cc_generic_services = true;
//----------------------------
@ -9,8 +16,8 @@ message UserRegisterReq {
string request_id = 1;
string nickname = 2;
string password = 3;
optional string verify_code_id = 4; //目前客户端实现了本地验证,该字段没用了
optional string verify_code = 5;//目前客户端实现了本地验证,该字段没用了
string verify_code_id = 4;
string verify_code = 5;
}
message UserRegisterRsp {
string request_id = 1;
@ -23,8 +30,8 @@ message UserLoginReq {
string request_id = 1;
string nickname = 2;
string password = 3;
optional string verify_code_id = 4;
optional string verify_code = 5;
string verify_code_id = 4;
string verify_code = 5;
}
message UserLoginRsp {
string request_id = 1;
@ -76,8 +83,8 @@ message PhoneLoginRsp {
//其他个人/好友信息的获取在好友操作中完成
message GetUserInfoReq {
string request_id = 1;
optional string user_id = 2; // 这个字段是网关进行身份鉴权之后填入的字段
optional string session_id = 3; // 进行客户端身份识别的关键字段
optional string user_id = 2;
optional string session_id = 3;
}
message GetUserInfoRsp {
string request_id = 1;
@ -85,17 +92,6 @@ message GetUserInfoRsp {
string errmsg = 3;
UserInfo user_info = 4;
}
//内部接口
message GetMultiUserInfoReq {
string request_id = 1;
repeated string users_id = 2;
}
message GetMultiUserInfoRsp {
string request_id = 1;
bool success = 2;
string errmsg = 3;
map<string, UserInfo> users_info = 4;
}
//----------------------------
//用户头像修改
message SetUserAvatarReq {
@ -158,9 +154,8 @@ service UserService {
rpc PhoneRegister(PhoneRegisterReq) returns (PhoneRegisterRsp);
rpc PhoneLogin(PhoneLoginReq) returns (PhoneLoginRsp);
rpc GetUserInfo(GetUserInfoReq) returns (GetUserInfoRsp);
rpc GetMultiUserInfo(GetMultiUserInfoReq) returns (GetMultiUserInfoRsp);
rpc SetUserAvatar(SetUserAvatarReq) returns (SetUserAvatarRsp);
rpc SetUserNickname(SetUserNicknameReq) returns (SetUserNicknameRsp);
rpc SetUserDescription(SetUserDescriptionReq) returns (SetUserDescriptionRsp);
rpc SetUserPhoneNumber(SetUserPhoneNumberReq) returns (SetUserPhoneNumberRsp);
}
}