仓库地址:https://github.com/Leo072060/Chat-Pool
支持多用户在线实时聊天,消息通过服务器高效转发,确保所有用户同步接收最新聊天内容。 增加AI助手,输入“小雯”或“AI”即可触发!
HTTP服务器 采用C++实现,支持处理常见的HTTP请求(如GET、POST),能够解析浏览器请求并生成对应的HTTP响应,确保与客户端的高效交互。 实现日志的写入,方便HTTP服务器调试。
进程间通信 通过进程套接字(IPC Socket)实现服务器与事务处理模块之间的高效通信,确保数据传递的可靠性与实时性。
前端页面 提供简易的聊天页面,用户可以通过浏览器访问并参与聊天。
网络 通过配置WSL镜像网络,并结合内网穿透技术,实现外网对本地服务的无缝访问,确保聊天服务器能够在广域网中正常运行。
|—— include
| |—— 头文件(.h 文件)
|—— src
| |—— httpd
| | |—— 处理 HTTP 请求的源代码文件
| |—— message
| | |—— 实现简单的类似 JSON 功能的源代码文件
| |—— transaction
| | |—— 事务处理的源代码文件
|—— CMakeLists.txt
|—— build
| |—— httpd
| | |—— index.html
| |—— AI
| | |—— xiaowen.py 调用AI的脚本
|—— .clang-format
-
进入 build 目录
在项目根目录下执行以下命令:
cd build
-
生成构建文件
使用 cmake 生成构建文件:
cmake ..
-
编译项目
使用 make 编译项目:
make
此时在build目录下出现HTTPD和transaction两个可执行程序。
-
启动事务处理服务器(源码中设置运行在7002端口)
在 build 目录下运行事务处理服务器:
./transaction
-
运行HTTP 服务
在 build 目录下启动 HTTP 服务器(源码中设置运行在7001端口):
./HTTPD
-
启动HTTP服务
twh@TWH:~/TinyBridge/build$ ./HTTPD ------------------------------------------- | Command List: | | 1. start - Start the server | | 2. stop - Stop the server | | 3. exit - Exit the console | ------------------------------------------- Enter command: start Starting server on port 7001... ------------------------------------------- | Command List: | | 1. start - Start the server | | 2. stop - Stop the server | | 3. exit - Exit the console | ------------------------------------------- Enter command: stop Stopping server on port 7001... ------------------------------------------- | Command List: | | 1. start - Start the server | | 2. stop - Stop the server | | 3. exit - Exit the console | ------------------------------------------- Enter command: exit Exiting console...
-
打开wsl setting设置Windows子系统wsl的网络模式为镜像
此时wsl与Windows便共用一个IP地址。
-
此时在浏览器输入http://localhost:7001/便可以访问网页
其他设备在浏览器输入
[主机IP]:7001
也可以访问网页。但此时由于我们使用的不是公网IP,所以如果分享给不在我们局域网内的小伙伴,则会访问不到。申请公网IP比较麻烦,而使用内网穿透技术可以简单实现公网访问。
-
查看HTTP服务器日志
我使用的是贝锐花生壳内网穿透|ddns动态域名解析|端口映射工具-贝锐花生壳官网来进行内网穿透的。
将主机IP映射到分配的网站域名即可实现公网访问。
在build/AI/xiaowen.py脚本文件中配置智谱AI大模型API的keys。
新版 WSL2 2.0 设置 Windows 和 WSL 镜像网络教程_wsl网络设置-CSDN博客
建议在退出HTTP服务器控制台之前先执行stop
命令关闭TCP套接字。
twh@TWH:~/TinyBridge/build$ ./transaction
terminate called after throwing an instance of 'std::runtime_error'
what(): Failed to bind socket
Aborted (core dumped)
使用 lsof
和 kill
命令
-
查找占用端口的进程
使用lsof
命令查找占用指定端口的进程:lsof -i :端口号
例如,查找占用端口
8080
的进程:lsof -i :8080
输出示例:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME node 12345 user 20u IPv6 123456 0t0 TCP *:http-alt (LISTEN)
其中,
PID
是进程 ID。 -
杀死进程
使用kill
命令杀死进程:kill -9 PID
例如,杀死 PID 为
12345
的进程:kill -9 12345
-
强制杀死进程(如果
kill
无效)
如果kill
命令无效,可以尝试强制杀死进程:kill -9 $(lsof -t -i :端口号)
例如,强制杀死占用端口
8080
的进程:kill -9 $(lsof -t -i :8080)