用線程池技術和快速json解析技術重寫Tcp socket server程序

c++11發佈後,有許多新技術用於幫助c++重新煥發生機。我也用線程池技術和快速json解析技術重寫Tcp socket 
server程序,效率和安全性得到很大的提升。
(cmm_owms) [root@xiaoqi-api-server bin]# ./EntrySvr_v2 &
[1] 22836
(cmm_owms) [root@xiaoqi-api-server bin]# built on time=20200514-1152

(cmm_owms) [root@xiaoqi-api-server bin]# ./tcpclt 
2020-05-14 11:52:56.379 D tcpclt[22847] util.cpp:303 operator() | Stamp thread started!
2020-05-14 11:52:56.380 I tcpclt[22847] EventPoller.cpp:449 EventPollerPool | EventPoller[] has:8
2020-05-14 11:52:56.380 D tcpclt[22847] tcpclt.cpp:12 TestClient | 
2020-05-14 11:52:56.381 I tcpclt[22847] WorkThreadPool.cpp:38 WorkThreadPool | WorkThreadPool[] has:8
2020-05-14 11:52:56.382 I tcpclt[22847] tcpclt.cpp:20 onConnect | success
2020-05-14 11:52:58.384 D tcpclt[22847] tcpclt.cpp:24 onRecv | {"action":"redirect","svrip":"47.115.190.122","svrport
":17030} from port:16081

2020-05-14 11:53:00.385 D tcpclt[22847] tcpclt.cpp:24 onRecv | {"action":"redirect","svrip":"47.115.190.122","svrport
":17030} from port:16081

2020-05-14 11:53:02.387 D tcpclt[22847] tcpclt.cpp:24 onRecv | {"action":"redirect","svrip":"47.115.190.122","svrport
":17030} from port:16081

^C2020-05-14 11:53:03.292 D tcpclt[22847] tcpclt.cpp:15 ~TestClient | 
2020-05-14 11:52:48.697 I EntrySvr_v2[22836] TcpServer.h:295 start_l | TCP Server listening on 0.0.0.0:16081
2020-05-14 11:52:56.382 D EntrySvr_v2[22836] EntrySvr.cpp:26 EchoSession | 
2020-05-14 11:52:56.704 D EntrySvr_v2[22836] EntrySvr.cpp:120 onManager | 
2020-05-14 11:52:58.384 T EntrySvr_v2[22836] EntrySvr.cpp:111 onRecv | recv[]=@@1{"action":"redirect","devid":"
A68000011809SN000320","vid":"0001","pid":"A680","devtype":"5"}##

2020-05-14 11:52:58.384 T EntrySvr_v2[22836] EntrySvr.cpp:55 msgProc | msg[]={"action":"redirect","devid":"
A68000011809SN000320","vid":"0001","pid":"A680","devtype":"5"}

2020-05-14 11:52:58.384 T EntrySvr_v2[22836] EntrySvr.cpp:101 msgProc | send[]={"action":"redirect","svrip":"47.115.
190.122","svrport":17030}

2020-05-14 11:52:58.705 D EntrySvr_v2[22836] EntrySvr.cpp:120 onManager | 
2020-05-14 11:53:00.385 T EntrySvr_v2[22836] EntrySvr.cpp:111 onRecv | recv[]=@@1{"action":"redirect","devid":"
A68000011809SN000320","vid":"0001","pid":"A680","devtype":"5"}##

2020-05-14 11:53:00.385 T EntrySvr_v2[22836] EntrySvr.cpp:55 msgProc | msg[]={"action":"redirect","devid":"
A68000011809SN000320","vid":"0001","pid":"A680","devtype":"5"}

2020-05-14 11:53:00.385 T EntrySvr_v2[22836] EntrySvr.cpp:101 msgProc | send[]={"action":"redirect","svrip":"47.115.
190.122","svrport":17030}

2020-05-14 11:53:00.704 D EntrySvr_v2[22836] EntrySvr.cpp:120 onManager | 
2020-05-14 11:53:02.387 T EntrySvr_v2[22836] EntrySvr.cpp:111 onRecv | recv[]=@@1{"action":"redirect","devid":"
A68000011809SN000320","vid":"0001","pid":"A680","devtype":"5"}##

2020-05-14 11:53:02.387 T EntrySvr_v2[22836] EntrySvr.cpp:55 msgProc | msg[]={"action":"redirect","devid":"
A68000011809SN000320","vid":"0001","pid":"A680","devtype":"5"}

2020-05-14 11:53:02.387 T EntrySvr_v2[22836] EntrySvr.cpp:101 msgProc | send[]={"action":"redirect","svrip":"47.115.
190.122","svrport":17030}

2020-05-14 11:53:02.705 D EntrySvr_v2[22836] EntrySvr.cpp:120 onManager | 
2020-05-14 11:53:03.292 W EntrySvr_v2[22836] EntrySvr.cpp:116 onError | end of file
2020-05-14 11:53:03.292 D EntrySvr_v2[22836] EntrySvr.cpp:29 ~EchoSession | 
2020-05-14 11:53:03.292 D EntrySvr_v2[22836] EntrySvr.cpp:29 ~EchoSession | 
2020-05-14 11:55:19.397 T EntrySvr_v2[22836] TcpServer.h:142 ~TcpServer | start clean tcp server...
2020-05-14 11:55:19.397 T EntrySvr_v2[22836] TcpServer.h:147 ~TcpServer | clean tcp server completed!
2020-05-14 11:55:19.397 I EntrySvr_v2[22836] EventPoller.cpp:94 ~EventPoller | 0x1eb2750
2020-05-14 11:55:19.397 I EntrySvr_v2[22836] EventPoller.cpp:94 ~EventPoller | 0x1eb2ee0
2020-05-14 11:55:19.397 I EntrySvr_v2[22836] EventPoller.cpp:94 ~EventPoller | 0x1eb3380
2020-05-14 11:55:19.397 I EntrySvr_v2[22836] EventPoller.cpp:94 ~EventPoller | 0x1eb3820
2020-05-14 11:55:19.397 I EntrySvr_v2[22836] EventPoller.cpp:94 ~EventPoller | 0x1eb3c60
2020-05-14 11:55:19.397 I EntrySvr_v2[22836] EventPoller.cpp:94 ~EventPoller | 0x1eb4160
2020-05-14 11:55:19.397 I EntrySvr_v2[22836] EventPoller.cpp:94 ~EventPoller | 0x1eb45d0
2020-05-14 11:55:19.397 I EntrySvr_v2[22836] EventPoller.cpp:94 ~EventPoller | 0x1eb4a40
2020-05-14 11:55:19.398 I EntrySvr_v2[22836] logger.cpp:57 ~Logger | 
[1]+  已完成                  ./EntrySvr_v2

上述測試表明,EntrySvr_v2已經測試通過。可以快速解析json字符串,可以用thread 
pool來快速處理socket連接請求,以及最終安全釋放線程池!
項目地址:
https://github.com/freeman1974/TcpSvr
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章