delphiDIOCP開源專案連線池

2021-09-02 03:22:51 字數 1783 閱讀 5982

**今天群裡有個朋友說他們醫院專案採用直連資料庫,高峰時期sqlserver的連線數達到7000多,於是我準備做個用diocp做個demo,服務端用連線池。白天的時候我在想,併發如果7000個。如果用diocp做三層伺服器,連線池應該在100個左右。今天晚上奮鬥了一晚上,準備把測試過程中碰到的問題總結一下。

所有的**測試**寫完後,準備開始測試,配置後服務端的連線池(config\dbpool.config)

,

}

配置中main為連線池中連線的id《通過id獲取連線》

在客戶端編寫測試執行緒

procedure

ttester.execute;

varlvcds:tclientdataset;

begin

interlockedincrement(__testercount);

lvcds := tclientdataset.create(nil

);

trywhile (not self.terminated) and (not __stop) do

begin

tryfrdboperator.clear;

frdboperator.rscript.s[

'sql

'] :=fsql;

frdboperator.querycds(lvcds);

except

on e:exception

dobegin

tfilelogger.instance.logerrmessage(ftestercode +e.message);

end;

end;

//每執行一次進行異常關閉連線

frdboperator.connection.close;

end;

tfilelogger.instance.logdebugmessage(ftestercode + '

執行緒已經停止[

' + testercode + ']'

); fconnection.close;

finally

interlockeddecrement(__testercount);

lvcds.free;

end;end;

開始測試100,個執行緒,在筆記本上測試

問題來了

幾下客戶端就連線不上了,怎麼連線都連線不上《服務端連線數為0>,關閉了客戶端重新開也不行。心中一下就涼了,不會我寫的iocp這麼脆弱吧。

經過幾個小時的折騰和寫各種日誌,發現服務端中工作執行緒和監聽執行緒都是好好的,沒有退出執行緒。

後來我檢視網路情況發現服務端有在監聽9983埠《但是telnet不通》,我發現有好多被關閉的127.0.0.1->127.0.0.1:9983的連線,但是在網路狀態中可以看到,

過一段幾分鐘後,發現又可以連線上,估計客戶端不能頻繁的建立連線和關閉連線。

後來把客戶端**修改下《刪除下面的**》。發現一切正常,還好不是服務端的問題,diocp還是經的住考驗。

//每執行一次進行異常關閉連線

frdboperator.connection.close;

開啟1000個客戶端,不停獲取資料,發現服務端連線池中最多只有7個連線,不過機器比較卡了《畢竟是筆記本》,想想我白天是多想了,diocp根據cpu的數量開啟的工作執行緒工作執行緒如果是7個,連線數肯定也不會超過7個。就算客戶端連線有7000個,資料庫的連線數也就是7個而已。

就算有7000個連線估計同時在執行資料庫的也不過就幾百個而已。處理起來應該是沒有問題的。明天給群裡的朋友測試下。多弄幾台客戶端測試下

C 開源專案

1.emule 2.todolist 3.ftpserver 4.wxwidgets 5.tightvnc 6.codejock.xtreme.suite.pro.activex 7.jrtplib 8.boost 9.nopepad 10.opencv 11.qt,gtk 12.openoffic...

docker docker開源專案

最早接觸docker是在14年年初,當初docker遠沒有這在這麼火,當時覺得docker也就是類似openstack cloudstack的乙個容器管理,沒什麼特別,沒想到啊,半年的時間裡,發生了如此翻天覆地的變化 vmware與docker合作 rhel 7整合docker cloudfoudr...

docker fig開源專案

今日主題 docker之fig開源專案。serf image ctlc serf ports 7373 7946 lb image ctlc haproxy ports 80 80 links serf environment haproxy password qa1n76pwari9 web im...