Skip to content

Commit ddcecf4

Browse files
committed
[soap] fix gsoap mysql call
1 parent 1837881 commit ddcecf4

8 files changed

Lines changed: 654 additions & 404 deletions

File tree

LinxSrvc/architecture.html

Lines changed: 62 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575
<h1 class="ht">LinxSrvc 项目架构全景</h1>
7676
<p class="hd">混合语言(C/C++/Python)大型服务端框架,集成网络通信、硬件交互、ML 训练、Web 服务、数据库查询与量化交易。CMake 构建,跨 Linux/macOS/Windows。</p>
7777
<div class="hs">
78-
<div class="st2"><div class="hh">16+</div><div class="hl">子模块</div></div>
78+
<div class="st2"><div class="hh">18+</div><div class="hl">子模块</div></div>
7979
<div class="st2"><div class="hh">3</div><div class="hl">编程语言</div></div>
8080
<div class="st2"><div class="hh">3</div><div class="hl">目标平台</div></div>
8181
<div class="st2"><div class="hh">9+</div><div class="hl">外部依赖</div></div>
@@ -119,23 +119,23 @@ <h1 class="ht">LinxSrvc 项目架构全景</h1>
119119
</div></div>
120120
<div class="cd" style="margin-top:.7rem"><h3>📁 目录结构</h3>
121121
<pre>LinxSrvc/
122-
├── 3rd/ # 第三方 (googletest, lcov, rdma-core)
123-
├── CMakeLists.txt # 顶层 CMake → e.g, media, dpsk, gn1, diff, lookup, mock
124-
├── Makefile # 总控 Makefile (→ build/, webev, hdware, IM, thread, gSOAPverify)
125-
├── cyber/ # LLM 训练/推理 (Python/PyTorch)
126-
├── dpsk/ # DeepSeek API 客户端 (C++/cURL)
127-
├── gSOAPverify/ # SOAP Web 服务验证 (gSOAP)
128-
├── hdware/ # 硬件驱动 (字符设备/FPGA/RDMA/4G)
129-
├── IM/ # KaiSocket 网络通信库 (C++)
130-
├── include/ # 公共头文件 (String, Structures)
131-
├── lookup/ # SQLite 多维度查找 (time/seek/tool)
132-
├── media/ # FFmpeg 音视频处理
133-
├── thread/ # 纯 C 线程池 (pthdpool)
134-
├── trade/ # 量化交易系统 (Python · 双均线+多周期共振+LSTM+期权)
135-
├── webev/ # 事件驱动 Web 服务器 (epoll)
136-
├── vs-extension/ # VSCode 文件夹比较扩展 (TS + Python, 相似度分析)
137-
├── pyex/ # Python C 扩展
138-
── e.g/ diff/ gn1/ mock/ test/ shell/</pre>
122+
├── 3rd/ # 第三方 (googletest, lcov, rdma-core, llama.cpp-to-hf)
123+
├── CMakeLists.txt # 顶层 CMake → media, dpsk, gn1, diff, lookup, mock, test
124+
├── Makefile # 总控 Makefile webev, hdware, IM, thread, gSOAPverify, pyex
125+
├── bin/ # 编译产物输出
126+
├── include/ # 公共头文件 (String_-inl.h, Structures.h)
127+
├── cyber/ # LLM 训练/推理 (Python/PyTorch + PEFT/LoRA)
128+
├── dpsk/ # DeepSeek API 客户端 (C++/cURL · 流式调用)
129+
├── gSOAPverify/ # 多线程 SOAP Web 服务 (gSOAP 2.8 + MySQL)
130+
├── hdware/ # 硬件驱动 (字符设备/FPGA/RDMA/UART/4G)
131+
├── IM/ # KaiSocket 网络通信库 (C++ · Pub/Sub · epoll)
132+
├── lookup/ # SQLite 多维度查找 (seek/time/tool · KMP/Manacher)
133+
├── media/ # FFmpeg 音视频处理 (Jetson 渲染)
134+
├── thread/ # 纯 C 线程池 (pthdpool · 固定 worker 数)
135+
├── trade/ # 量化交易 (Python · 双均线+LSTM+BS期权)
136+
├── webev/ # 事件驱动 Web 服务器 (epoll/kqueue · Reactor)
137+
├── vs-extension/ # VSCode 扩展 (TS+Python 文件夹相似度比较)
138+
── dpsk/ diff/ gn1/ mock/ pyex/ shell/ test/ e.g/</pre>
139139
</div>
140140
</div></section>
141141

@@ -291,35 +291,55 @@ <h1 class="ht">LinxSrvc 项目架构全景</h1>
291291
</div></section>
292292

293293
<section id="gs"><div class="ct">
294-
<div class="st"><h2>🔄 gSOAPverify — SOAP Web 服务验证</h2><span class="tg">gSOAP / MySQL</span></div>
294+
<div class="st"><h2>🔄 gSOAPverify — 多线程 SOAP Web 服务</h2><span class="tg">gSOAP / MySQL / pthread</span></div>
295295
<div class="cd"><div class="cd2">
296-
<div style="text-align:center;margin-bottom:.3rem"><div class="n x1"><div class="lb" style="font-size:.72rem">gSOAPverify</div><div class="ln">SOAP 客户端验证与集成</div></div></div>
296+
<div style="text-align:center;margin-bottom:.3rem"><div class="n x1"><div class="lb" style="font-size:.72rem">gSOAPverify 服务架构</div><div class="ln">环形缓冲队列 + 线程池 + MySQL · 3 个 SOAP API</div></div></div>
297297
<div class="rw">
298-
<div class="ag"><div class="al">代码生成层</div><div class="ao">
299-
<div class="n e1"><div class="lb">.h 头文件</div><div class="ln">WSDL 定义</div></div>
298+
<div class="ag"><div class="al">SOAP 代码生成</div><div class="ao">
299+
<div class="n e1"><div class="lb">myweb.wsdl</div><div class="ln">WSDL 接口定义</div></div>
300300
<div class="n e1"><div class="lb">wsdl2h</div><div class="ln">WSDL → 头文件</div></div>
301-
<div class="n x1"><div class="lb">soapcpp2</div><div class="ln">头文件 → 源码</div></div>
302-
<div class="n e1"><div class="lb">soap/*</div><div class="ln">生成的代理/存根</div></div>
301+
<div class="n x1"><div class="lb">soapcpp2</div><div class="ln">头文件 → 存根/代理</div></div>
302+
<div class="n e1"><div class="lb">soapC.cpp · soapStub.h</div><div class="ln">序列化/反序列化</div></div>
303303
</div></div>
304-
<div class="ag"><div class="al">数据/业务层</div><div class="ao">
305-
<div class="n m1"><div class="lb">mainSoap.cc</div><div class="ln">完整流程示例</div></div>
306-
<div class="n x1"><div class="lb">sql/</div><div class="ln">MySQL 封装</div></div>
307-
<div class="n i1"><div class="lb">sys/status.cc</div><div class="ln">服务状态</div></div>
304+
<div class="ag"><div class="al">服务核心层</div><div class="ao">
305+
<div class="n m1"><div class="lb">mainSoap.cc</div><div class="ln">主循环 + 环形队列</div></div>
306+
<div class="n m1"><div class="lb">mainSoap.h</div><div class="ln">soap_socket_t 类型</div></div>
307+
<div class="n s1"><div class="lb">process_queue()</div><div class="ln">MAX_THR=8 工作线程</div></div>
308+
<div class="n s1"><div class="lb">enqueue / dequeue</div><div class="ln">MAX_QUEUE=1024 环缓</div></div>
308309
</div></div>
309-
<div class="ag"><div class="al">操作流程</div><div class="ao">
310-
<div class="n g1"><div class="lb">🔐 登录</div></div>
311-
<div class="n y1"><div class="lb">📊 查询状态</div></div>
312-
<div class="n o1"><div class="lb">💸 发起交易</div></div>
313-
<div class="n r1"><div class="lb">🔌 关闭</div></div>
310+
<div class="ag"><div class="al">数据与工具层</div><div class="ao">
311+
<div class="n g1"><div class="lb">sql/sqlDbReq.cc</div><div class="ln">MySQL 连接 + 查询</div></div>
312+
<div class="n i1"><div class="lb">sys/status.cc</div><div class="ln">CPU/内存/网卡监控</div></div>
313+
<div class="n g1"><div class="lb">watch_connect()</div><div class="ln">自动重连守护线程</div></div>
314314
</div></div>
315+
<div class="ag"><div class="al">3 个 SOAP API</div><div class="ao">
316+
<div class="n z1"><div class="lb">🔀 trans</div><div class="ln">通用数据转发</div></div>
317+
<div class="n tc"><div class="lb">📊 get-server-status</div><div class="ln">系统状态查询</div></div>
318+
<div class="n m1"><div class="lb">🔐 login-by-key</div><div class="ln">用户登录认证</div></div>
319+
</div></div>
320+
</div>
321+
<div class="dv"></div>
322+
<div class="fc">
323+
<div class="fd" style="background:rgba(59,130,246,.06)"><div class="dm">1</div><div><div class="lb" style="font-size:.6rem">soap_bind(port) → listen(BACKLOG=64)</div></div></div>
324+
<div class="dx"></div>
325+
<div class="fd" style="background:rgba(139,92,246,.06)"><div class="dm">2</div><div><div class="lb" style="font-size:.6rem">soap_accept() → enqueue(sock, ip) 入环形缓冲</div></div></div>
326+
<div class="dx"></div>
327+
<div class="fd" style="background:rgba(16,185,129,.06)"><div class="dm">3</div><div><div class="lb" style="font-size:.6rem">8 个工作线程 dequeue() → soap_serve() 处理</div></div></div>
328+
<div class="dx"></div>
329+
<div class="fd" style="background:rgba(249,115,22,.06)"><div class="dm">4</div><div><div class="lb" style="font-size:.6rem">SOAP 请求 → MySQL 查询/状态监控 → SOAP 响应</div></div></div>
315330
</div>
316331
</div></div>
317332
<table style="margin-top:.6rem"><thead><tr><th>特性</th><th>实现</th></tr></thead><tbody>
318-
<tr><td>代码生成</td><td>WSDL → wsdl2h → soapcpp2 → 代理/存根</td></tr>
319-
<tr><td>数据库</td><td>SQL API 封装 MySQL 访问</td></tr>
320-
<tr><td>流程示例</td><td>登录 → 查询状态 → 交易 → 关闭</td></tr>
333+
<tr><td>并发模型</td><td>主线程 accept + 8 工作线程 (pthread) + 环形缓冲队列 (1024 槽位)</td></tr>
334+
<tr><td>API: trans</td><td><code>trans@key1=val1&amp;key2=val2</code> → 解析参数 → 转发处理</td></tr>
335+
<tr><td>API: get-server-status</td><td>req="1000" → 返回内存空闲百分比 (sysconf)</td></tr>
336+
<tr><td>API: login-by-key</td><td>usr + psw → MySQL 查询 → 返回 result{flag, idx, age, tell, email}</td></tr>
337+
<tr><td>数据库安全</td><td>snprintf 防溢出 · 密码从 MYAUTO_MYSQL_PSW 环境变量读取</td></tr>
338+
<tr><td>连接管理</td><td>watch_connect 守护线程 · MYSQL_OPT_RECONNECT · 最多重连 9 次</td></tr>
339+
<tr><td>跨平台兼容</td><td>soap_socket_t 解耦 SOAP 头文件 · AArch64 匿名 namespace 常量</td></tr>
340+
<tr><td>状态监控</td><td>getnameinfo/getaddrinfo (替代已弃用 API) · ETHTOOL 网线检测</td></tr>
321341
</tbody></table>
322-
<div class="tags" style="margin-top:.4rem"><span class="t tk">gSOAP</span><span class="t tk">WSDL</span><span class="t tk">SOAP</span><span class="t tg2">MySQL</span></div>
342+
<div class="tags" style="margin-top:.4rem"><span class="t tk">gSOAP 2.8</span><span class="t tk">WSDL</span><span class="t tk">SOAP/XML</span><span class="t tg2">MySQL 8</span><span class="t to">pthread</span><span class="t tr">环形缓冲</span><span class="t tp">线程池</span><span class="t g1">env 密码</span><span class="t tc">AArch64</span></div>
323343
</div></section>
324344

325345
<section id="dp"><div class="ct">
@@ -614,6 +634,7 @@ <h1 class="ht">LinxSrvc 项目架构全景</h1>
614634
<tr><td><span class="n m1"><div class="lb" style="font-size:.6rem">门面</div></span></td><td>cyber/dpsk</td><td>简化复杂 AI API</td></tr>
615635
<tr><td><span class="n i1"><div class="lb" style="font-size:.6rem">适配器</div></span></td><td>hdware</td><td>统一硬件接口</td></tr>
616636
<tr><td><span class="n o1"><div class="lb" style="font-size:.6rem">池化</div></span></td><td>thread/ + 模型缓存</td><td>复用资源,减少开销</td></tr>
637+
<tr><td><span class="n tr"><div class="lb" style="font-size:.6rem">生产者-消费者</div></span></td><td>gSOAPverify 环形缓冲</td><td>主线程 enqueue / 工作线程 dequeue</td></tr>
617638
</tbody></table>
618639
</div></div>
619640
</div></section>
@@ -627,13 +648,12 @@ <h1 class="ht">LinxSrvc 项目架构全景</h1>
627648
<div class="n r1"><div class="lb">依赖链长</div><div class="ln">3rd/ 依赖编译复杂</div></div>
628649
</div></div>
629650
<div class="ag"><div class="al">🟡 中风险</div><div class="ao">
630-
<div class="n y1"><div class="lb">跨平台差异</div><div class="ln">Linux/macOS/Windows 行为不一致</div></div>
631651
<div class="n y1"><div class="lb">内存管理</div><div class="ln">C++ 裸指针 + 手动释放</div></div>
652+
<div class="n y1"><div class="lb">头文件顺序</div><div class="ln">SOAP 宏定义时序依赖</div></div>
632653
</div></div>
633-
<div class="ag"><div class="al">💡 优化建议</div><div class="ao">
634-
<div class="n g1"><div class="lb">统一 CMake</div><div class="ln">合并为单一构建系统</div></div>
635-
<div class="n g1"><div class="lb">智能指针</div><div class="ln">unique_ptr/shared_ptr 替代裸指针</div></div>
636-
<div class="n g1"><div class="lb">CI/CD</div><div class="ln">自动化构建 + 测试管道</div></div>
654+
<div class="ag"><div class="al">💚 已解决</div><div class="ao">
655+
<div class="n g1"><div class="lb">AArch64 兼容</div><div class="ln">匿名 namespace 常量</div></div>
656+
<div class="n g1"><div class="lb">SOAP 解耦</div><div class="ln">soap_socket_t typedef</div></div>
637657
</div></div>
638658
</div>
639659
</div></div>

LinxSrvc/gSOAPverify/Makefile

Lines changed: 41 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,64 @@
1-
CUR = `pwd`
2-
GEN = $(CUR)/../bin
3-
OBJ = $(CUR)/../out
4-
PRJ = $(OBJ)/gSOAPverify
5-
WSDL= ./soap/myweb.wsdl
6-
FLAG= -Wall -g
7-
STAT = status.o
8-
MAIN = sqlDbReq.o mainSoap.o
9-
SOAP= soapC.o stdsoap2.o soapServer.o
10-
BIT = $(shell if [ `getconf LONG_BIT` -eq '64' ];then echo 64;fi;)
11-
SQL = -std=c++11 -I/usr/lib$(BIT)/mysql -lmysqlclient
12-
PTHD= -std=c++11 -lpthread #-lgsoap++#-L/usr/local/gSOAP/lib/libsoap++
13-
FLAG += -DNS_DBG
1+
CUR = $(shell pwd)
2+
GEN = $(CUR)/../bin
3+
OBJ = $(CUR)/../out
4+
PRJ = $(OBJ)/gSOAPverify
5+
WSDL = ./soap/myweb.wsdl
6+
7+
FLAG = -Wall -g -DNS_DBG -std=c++11
8+
SOAP = soapC.o stdsoap2.o soapServer.o
9+
STAT = status.o
10+
MAIN = sqlDbReq.o mainSoap.o
11+
12+
BIT = $(shell if [ `getconf LONG_BIT` -eq '64' ]; then echo 64; fi)
13+
SQL = -I/usr/lib$(BIT)/mysql -lmysqlclient
14+
PTHD = -lpthread
15+
1416
gSOAPverify:
1517
@g++ $(FLAG) -c soap/soapC.cpp
1618
@g++ $(FLAG) -c soap/stdsoap2.cpp
1719
@g++ $(FLAG) -c soap/soapServer.cpp
18-
@g++ $(FLAG) -c sys/status.cc -std=c++11
20+
@g++ $(FLAG) -c sys/status.cc
1921
# bash -c '`command -v apt >/dev/null 2>&1 || { echo >&2 "-";}` == "-"'
2022
# if [ ! -d "/usr/include/mysql" ]; then if [ `command -v apt` == "" ]; then sudo yum install mariadb-devel -y; else sudo apt-get install libmysql++-dev -y; fi; fi;
21-
@echo "### To install mysql develop library\n### \033[1mREHL:\033[0m 'sudo yum install mariadb-devel -y';\n### \033[1mDebain:\033[0m 'sudo apt install libmysql++-dev -y';"
22-
@[ ! -d ${GEN} ] && mkdir ${GEN} || echo -- [$(abspath ${GEN})] exists!
23-
ifneq ($(shell if [ ! -d /usr/lib/mysql ] && [ `ls /usr/lib/*/libmysql*.so | wc -l` -le 0 ]; then echo false; fi;), false)
23+
@echo "### To install MySQL development library:"
24+
@echo "### \033[1mREHL:\033[0m sudo yum install mariadb-devel -y"
25+
@echo "### \033[1mDebian:\033[0m sudo apt install libmysql++-dev -y"
26+
@[ ! -d ${GEN} ] && mkdir ${GEN} || echo "-- [$(abspath ${GEN})] exists!"
27+
ifneq ($(shell if [ ! -d /usr/lib/mysql ] && [ `ls /usr/lib/*/libmysql*.so 2>/dev/null | wc -l` -le 0 ]; then echo false; fi;), false)
2428
@g++ $(FLAG) -c ./sql/sqlDbReq.cc $(SQL)
2529
@g++ $(FLAG) -I.. -c ./main/mainSoap.cc $(PTHD)
2630
@g++ $(FLAG) -o $(GEN)/gSOAPverify $(STAT) $(SOAP) $(MAIN) $(SQL) $(PTHD)
2731
@echo "-- Built: \033[1m$@\033[0m"
2832
else
29-
@echo [100%] Built gSOAPverify without linking mysql library
33+
@echo "[100%] Built gSOAPverify without MySQL library"
3034
endif
31-
$(shell if [ -f $(WSDL) ];then if [ -d $(GEN) ];then cp $(WSDL) $(GEN)/;fi;else @echo "file <$(WSDL)> don't exist.";fi;)
32-
$(shell if [ -d $(PRJ) ];then rm -rf $(OBJ);fi;)
35+
$(shell if [ -f $(WSDL) ]; then if [ -d $(GEN) ]; then cp $(WSDL) $(GEN)/; fi; else echo "file <$(WSDL)> doesn't exist."; fi)
36+
$(shell if [ -d $(PRJ) ]; then rm -rf $(OBJ); fi)
3337
@mkdir -p $(PRJ)
34-
@mv $(CUR)/../*.o ${OBJ}
35-
@mv ./*.o $(PRJ)
36-
@echo -- make gSOAPverify SUCCESS
38+
@mv $(CUR)/../*.o ${OBJ} 2>/dev/null || true
39+
@mv ./*.o $(PRJ) 2>/dev/null || true
40+
@echo "-- make gSOAPverify SUCCESS"
41+
3742
all:
38-
@if [ `ps -fe | grep gSOAPverify | grep -v grep` -eq 0 ]; then killall -9 gSOAPverify; else echo "making gSOAPverify."; fi;
43+
@if ps -fe | grep -q '[g]SOAPverify'; then killall -9 gSOAPverify; else echo "making gSOAPverify."; fi
3944
make clear
4045
make -j4
41-
$(GEN)/gSOAPverify 8080
46+
$(GEN)/gSOAPverify 8800
47+
4248
install:
4349
make -j4
4450
cp $(GEN)/gSOAPverify /usr/sbin/
4551
cp $(GEN)/gSOAPverify /etc/init.d/
46-
cd /etc/init.d/
47-
chmod +x gSOAPverify
48-
cd /etc/rc3.d/
49-
@ln -sf ../init.d/gSOAPverify ./S77_SOAP
50-
@cp -R ./readme/* /var/www/html
52+
chmod +x /etc/init.d/gSOAPverify
53+
cd /etc/rc3.d/ && ln -sf ../init.d/gSOAPverify ./S77_SOAP
54+
@cp -R ./readme/* /var/www/html 2>/dev/null || true
55+
5156
clean:
5257
@rm -f ./*.o ./core.* $(GEN)/*.a $(GEN)/*.out $(GEN)/core.* $(PRJ)/*.o $(GEN)/gSOAPverify
58+
5359
clear:
54-
@rm -f ./*.o ./core.* $(PRJ)/*.o `ls *.o | egrep -v soapC.o stdsoap2.o soapServer.o`
55-
rm -rvf $(GEN) $(OBJ)
56-
rm -f /etc/init.d/gSOAPverify /usr/sbin/gSOAPverify
57-
rm -rvf S77_SOAP \
58-
y
60+
@rm -f ./*.o ./core.* $(PRJ)/*.o
61+
@rm -f `ls *.o 2>/dev/null | egrep -v 'soapC.o|stdsoap2.o|soapServer.o'`
62+
@rm -rvf $(GEN) $(OBJ)
63+
@rm -f /etc/init.d/gSOAPverify /usr/sbin/gSOAPverify
64+
@rm -f S77_SOAP

0 commit comments

Comments
 (0)