mirror of
https://gitee.com/Zhaoxin59/my-chat_-server.git
synced 2026-02-13 17:11:48 +08:00
update
This commit is contained in:
56
gateway/CMakeLists.txt
Normal file
56
gateway/CMakeLists.txt
Normal file
@ -0,0 +1,56 @@
|
||||
# 1. 添加cmake版本说明
|
||||
cmake_minimum_required(VERSION 3.1.3)
|
||||
# 2. 声明工程名称
|
||||
project(gateway_server)
|
||||
|
||||
set(target "gateway_server")
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
|
||||
|
||||
# 3. 检测并生成ODB框架代码
|
||||
# 1. 添加所需的proto映射代码文件名称
|
||||
set(proto_path ${CMAKE_CURRENT_SOURCE_DIR}/../proto)
|
||||
set(proto_files base.proto user.proto file.proto friend.proto gateway.proto message.proto notify.proto speech.proto transmite.proto )
|
||||
# 2. 检测框架代码文件是否已经生成
|
||||
set(proto_hxx "")
|
||||
set(proto_cxx "")
|
||||
set(proto_srcs "")
|
||||
foreach(proto_file ${proto_files})
|
||||
# 3. 如果没有生成,则预定义生成指令 -- 用于在构建项目之间先生成框架代码
|
||||
string(REPLACE ".proto" ".pb.cc" proto_cc ${proto_file})
|
||||
string(REPLACE ".proto" ".pb.h" proto_hh ${proto_file})
|
||||
if (NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}${proto_cc})
|
||||
add_custom_command(
|
||||
PRE_BUILD
|
||||
COMMAND protoc
|
||||
ARGS --cpp_out=${CMAKE_CURRENT_BINARY_DIR} -I ${proto_path} --experimental_allow_proto3_optional ${proto_path}/${proto_file}
|
||||
DEPENDS ${proto_path}/${proto_file}
|
||||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${proto_cc}
|
||||
COMMENT "生成Protobuf框架代码文件:" ${CMAKE_CURRENT_BINARY_DIR}/${proto_cc}
|
||||
)
|
||||
endif()
|
||||
list(APPEND proto_srcs ${CMAKE_CURRENT_BINARY_DIR}/${proto_cc})
|
||||
endforeach()
|
||||
|
||||
# 4. 获取源码目录下的所有源码文件
|
||||
set(src_files "")
|
||||
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/source src_files)
|
||||
# 5. 声明目标及依赖
|
||||
add_executable(${target} ${src_files} ${proto_srcs} ${odb_srcs})
|
||||
# 7. 设置需要连接的库
|
||||
target_link_libraries(${target} -lgflags
|
||||
-lspdlog -lfmt -lbrpc -lssl -lcrypto
|
||||
-lprotobuf -lleveldb -letcd-cpp-api
|
||||
-lodb-mysql -lodb -lodb-boost
|
||||
-lhiredis -lredis++
|
||||
-lcpprest -lcurl
|
||||
-lpthread -lboost_system)
|
||||
|
||||
|
||||
# 6. 设置头文件默认搜索路径
|
||||
include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../common)
|
||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../third/include)
|
||||
|
||||
#8. 设置安装路径
|
||||
INSTALL(TARGETS ${target} RUNTIME DESTINATION bin)
|
||||
16
gateway/dockerfile
Normal file
16
gateway/dockerfile
Normal file
@ -0,0 +1,16 @@
|
||||
# 声明基础经镜像来源
|
||||
FROM debian:12
|
||||
|
||||
# 声明工作目录
|
||||
WORKDIR /im
|
||||
RUN mkdir -p /im/logs &&\
|
||||
mkdir -p /im/data &&\
|
||||
mkdir -p /im/conf &&\
|
||||
mkdir -p /im/bin
|
||||
|
||||
# 将可执行程序依赖,拷贝进镜像
|
||||
COPY ./build/gateway_server /im/bin/
|
||||
# 将可执行程序文件,拷贝进镜像
|
||||
COPY ./depends /lib/x86_64-linux-gnu/
|
||||
# 设置容器启动的默认操作 ---运行程序
|
||||
CMD /im/bin/gateway_server -flagfile=/im/conf/gateway_server.conf
|
||||
17
gateway/gateway_server.conf
Normal file
17
gateway/gateway_server.conf
Normal file
@ -0,0 +1,17 @@
|
||||
-run_mode=true
|
||||
-log_file=/im/logs/gateway.log
|
||||
-log_level=0
|
||||
-http_listen_port=9000
|
||||
-websocket_listen_port=9001
|
||||
-registry_host=http://10.0.0.235:2379
|
||||
-base_service=/service
|
||||
-file_service=/service/file_service
|
||||
-friend_service=/service/friend_service
|
||||
-message_service=/service/message_service
|
||||
-user_service=/service/user_service
|
||||
-speech_service=/service/speech_service
|
||||
-transmite_service=/service/transmite_service
|
||||
-redis_host=10.0.0.235
|
||||
-redis_port=6379
|
||||
-redis_db=0
|
||||
-redis_keep_alive=true
|
||||
64
gateway/source/connection.hpp
Normal file
64
gateway/source/connection.hpp
Normal file
@ -0,0 +1,64 @@
|
||||
#include <websocketpp/config/asio_no_tls.hpp>
|
||||
#include <websocketpp/server.hpp>
|
||||
#include "logger.hpp"
|
||||
|
||||
namespace bite_im {
|
||||
typedef websocketpp::server<websocketpp::config::asio> server_t;
|
||||
// 连接的类型: server_t::connection_ptr
|
||||
|
||||
class Connection {
|
||||
public:
|
||||
struct Client {
|
||||
Client(const std::string &u, const std::string &s):uid(u), ssid(s){}
|
||||
std::string uid;
|
||||
std::string ssid;
|
||||
};
|
||||
using ptr = std::shared_ptr<Connection>;
|
||||
Connection(){}
|
||||
~Connection() {}
|
||||
void insert(const server_t::connection_ptr &conn,
|
||||
const std::string &uid, const std::string &ssid) {
|
||||
std::unique_lock<std::mutex> lock(_mutex);
|
||||
_uid_connections.insert(std::make_pair(uid, conn));
|
||||
_conn_clients.insert(std::make_pair(conn, Client(uid, ssid)));
|
||||
LOG_DEBUG("新增长连接用户信息:{}-{}-{}", (size_t)conn.get(), uid, ssid);
|
||||
}
|
||||
server_t::connection_ptr connection(const std::string &uid) {
|
||||
std::unique_lock<std::mutex> lock(_mutex);
|
||||
auto it = _uid_connections.find(uid);
|
||||
if (it == _uid_connections.end()) {
|
||||
LOG_ERROR("未找到 {} 客户端的长连接!", uid);
|
||||
return server_t::connection_ptr();
|
||||
}
|
||||
LOG_DEBUG("找到 {} 客户端的长连接!", uid);
|
||||
return it->second;
|
||||
}
|
||||
bool client(const server_t::connection_ptr &conn, std::string &uid, std::string &ssid) {
|
||||
std::unique_lock<std::mutex> lock(_mutex);
|
||||
auto it = _conn_clients.find(conn);
|
||||
if (it == _conn_clients.end()) {
|
||||
LOG_ERROR("获取-未找到长连接 {} 对应的客户端信息!", (size_t)conn.get());
|
||||
return false;
|
||||
}
|
||||
uid = it->second.uid;
|
||||
ssid = it->second.ssid;
|
||||
LOG_DEBUG("获取长连接客户端信息成功!");
|
||||
return true;
|
||||
}
|
||||
void remove(const server_t::connection_ptr &conn) {
|
||||
std::unique_lock<std::mutex> lock(_mutex);
|
||||
auto it = _conn_clients.find(conn);
|
||||
if (it == _conn_clients.end()) {
|
||||
LOG_ERROR("删除-未找到长连接 {} 对应的客户端信息!", (size_t)conn.get());
|
||||
return;
|
||||
}
|
||||
_uid_connections.erase(it->second.uid);
|
||||
_conn_clients.erase(it);
|
||||
LOG_DEBUG("删除长连接信息完毕!");
|
||||
}
|
||||
private:
|
||||
std::mutex _mutex;
|
||||
std::unordered_map<std::string, server_t::connection_ptr> _uid_connections;
|
||||
std::unordered_map<server_t::connection_ptr, Client> _conn_clients;
|
||||
};
|
||||
}
|
||||
39
gateway/source/gateway_server.cc
Normal file
39
gateway/source/gateway_server.cc
Normal file
@ -0,0 +1,39 @@
|
||||
//主要实现语音识别子服务的服务器的搭建
|
||||
#include "gateway_server.hpp"
|
||||
|
||||
DEFINE_bool(run_mode, false, "程序的运行模式,false-调试; true-发布;");
|
||||
DEFINE_string(log_file, "", "发布模式下,用于指定日志的输出文件");
|
||||
DEFINE_int32(log_level, 0, "发布模式下,用于指定日志输出等级");
|
||||
|
||||
DEFINE_int32(http_listen_port, 9000, "HTTP服务器监听端口");
|
||||
DEFINE_int32(websocket_listen_port, 9001, "Websocket服务器监听端口");
|
||||
|
||||
DEFINE_string(registry_host, "http://127.0.0.1:2379", "服务注册中心地址");
|
||||
DEFINE_string(base_service, "/service", "服务监控根目录");
|
||||
DEFINE_string(file_service, "/service/file_service", "文件存储子服务名称");
|
||||
DEFINE_string(friend_service, "/service/friend_service", "好友管理子服务名称");
|
||||
DEFINE_string(message_service, "/service/message_service", "消息存储子服务名称");
|
||||
DEFINE_string(user_service, "/service/user_service", "用户管理子服务名称");
|
||||
DEFINE_string(speech_service, "/service/speech_service", "语音识别子服务名称");
|
||||
DEFINE_string(transmite_service, "/service/transmite_service", "转发管理子服务名称");
|
||||
|
||||
DEFINE_string(redis_host, "127.0.0.1", "Redis服务器访问地址");
|
||||
DEFINE_int32(redis_port, 6379, "Redis服务器访问端口");
|
||||
DEFINE_int32(redis_db, 0, "Redis默认库号");
|
||||
DEFINE_bool(redis_keep_alive, true, "Redis长连接保活选项");
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
google::ParseCommandLineFlags(&argc, &argv, true);
|
||||
bite_im::init_logger(FLAGS_run_mode, FLAGS_log_file, FLAGS_log_level);
|
||||
|
||||
bite_im::GatewayServerBuilder gsb;
|
||||
gsb.make_redis_object(FLAGS_redis_host, FLAGS_redis_port, FLAGS_redis_db, FLAGS_redis_keep_alive);
|
||||
gsb.make_discovery_object(FLAGS_registry_host, FLAGS_base_service, FLAGS_file_service,
|
||||
FLAGS_speech_service, FLAGS_message_service, FLAGS_friend_service,
|
||||
FLAGS_user_service, FLAGS_transmite_service);
|
||||
gsb.make_server_object(FLAGS_websocket_listen_port, FLAGS_http_listen_port);
|
||||
auto server = gsb.build();
|
||||
server->start();
|
||||
return 0;
|
||||
}
|
||||
1421
gateway/source/gateway_server.hpp
Normal file
1421
gateway/source/gateway_server.hpp
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user