This commit is contained in:
2025-10-13 18:34:48 +08:00
commit 37865d041f
116 changed files with 31168 additions and 0 deletions

View 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;
};
}

View 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;
}

File diff suppressed because it is too large Load Diff