91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

說明

一、受限制庫Dll和lib說明:
庫文件G-TcpServer.lib、G-TcpServer.Dll是受限制的試用版本和Demo配套。
1、最大連接不能超過50
2、發送字節數不能超過50
3、不能設置0讀投遞、無超時機制
4、其他功能限制

二、版本解讀說明
1、版本名帶T的表示是受限制的試用版
2、版本名帶bata表示非正式版
3、版本名帶WChar表示支持WideChar
4、版本號以時間格式累加計數(60進1)和顯示

三、文件“G-TcpServer無限制體驗版.exe”是無限制的體驗版。

四、文件夾
1、Demos文件夾是VC Lib、Dll庫及Delphi2010的例程源碼,供開發學習
2、G-Sockets文件夾是Lib和Dll庫的Delphi和VC的頭文件
3、Release\G-Sockets\Dll文件夾是動態庫的輸出文件夾
4、Release\G-Sockets\Lib文件夾是靜態庫的輸出文件夾

1、模塊包含處理線程、工作線程和看守線程。
工作線程負責IO投遞工作,并響應投遞返回,再把接收的數據投遞給處理線程,處理線程調用回調函數給應用層,以此可以在通訊層和應用層之間現實0拷貝數據的功能。模塊只有一個

看守線程,負責:a、響應Accept事件并投遞接受隊列;b、效驗接受超時(即只連接不發數據)斷開連接,防止空連接;c、效驗空閑超時(即心跳超時)斷開連接。
按工作量來分,最繁重的是處理線程,其次是工作線程,最閑的是看守線程??赏ㄟ^OnThread事件回調函數設置線程權限。在此線程模式下,應用層可以在回調函數里處理數據而不必再建立另外的數據處理線程池。

2、線程平衡
為使連接能平衡使用處理線程,每個連接同時只有一個處理線程處理工作線程投遞過來的IO返回事件并調用回調函數通知應用層。

3、收發平衡
為使連接能平衡使用IO設備,每個連接同時只能投遞一個讀請求,并通過線程平衡機制保證接收的數據是按順序的被處理線程處理及通過回調函數傳遞給應用層;同時也只能投遞一個寫請求,其余寫請求都按順序放在寫隊列里面。讀寫同步都使用臨界段。

4、0拷貝技術
接收數據0拷貝看1項;提供GTcpSvr_AllocGBuf()、GTcpSvr_FreeGBuf()和GTcpSvr_PostSendGBuf()三個函數實現發送數據的0拷貝。

5、0讀投遞
為避免內核鎖定分頁內存過多,可通過設置來采用0讀投遞來降低吞吐性能從而實現大連接量。

6、HndData回收
HndData回收有多種方法,但額外會在收發數據這兩個頻率操作上增加工作量,因此盡量避免在這兩個操作時做太多的工作是有必要的。模塊均不采用“投遞計數”或“投遞鏈表”的方式來判斷回收HndData的時機,而是一旦斷線立即回收,其他未決投遞繼續返回時只處理IoData,不對HndData做任何寫操作。同時為避免HndData剛收回來但其未決投遞還沒有完全返回之前就立即被利用的可能性,HndData池采用了FIFO雙鎖并發鏈表,該鏈表通過ExNumber值來實現在最大連接情況下HndData池還有ExNumber個數量使鏈表不為NULL,通過設置ExNumber數量可實現控制鏈表末端的HndData出列時間,在這個時間內可以保證斷開剛回收的HndData的未決投遞能夠完全返回。
HndData池,初始時如下:
HD1 + HD2 + HD... + HDMaxConnection + HDEx1 + HDEx2 + HDEx... + HDExNumber
| |
Head------------------------------------------------------------------Tail

達到最大連接時如下:
HDEx1 + HDEx2 + HDEx... + HDExNumber
| |
Head---------------------------Tail

斷開回收一個HndData(HD)后如下:
HDEx1 + HDEx2 + HDEx... + HDExNumber + HD
| |
Head-------(需要T時間HD才能出列)------Tail
注:T可以通過控制ExNumber值來實現,假定每秒最大可以處理C個連接和斷開,需要延時T秒所有未決投遞才會完全回收,那么:ExNumber = T * (MaxConnection / C)。實際上每個連接未決投遞非常少(因為讀寫是單投遞的),并且工作線程并不處理數據工作量不大,因此T很短,模塊默認是3秒。對于服務器而已,一秒能接受的連接量是可知預計的,模塊默認是1萬,假定MaxConnection=C所以ExNumber是3萬。但實際應用中,正常情況下連接率遠少于1萬/S,尤其是長連接的服務器,即使是短連接的服務器也不會發生這樣的連接率。可能的情況是DOS,如果是影響也不大,因為還有MaxConnection控制,超過這個數的連接就立即被CloseSocket了。和頻率高的數據收發相比,斷線、連接的頻率遠少于它,在頻率低的地方上多做多點工作總比在頻率高的地方多做一點工作的好。

7、可伸縮性
IoData數量可根據初始需要設置,資源不足時模塊自動向系統申請內存。為保證HndData的安全性,HndData池還設置了延時出列,剛回收的HndData入列時間必須超過3(或更長)秒鐘,如果未達到3秒的,模塊自動向系統申請內存。

8、內存管理
IoData和HndData均采用VirtualAlloc和VirtualFree來向系統操作內存。IoData池采用原子函數InterlockedCompareExchange來操作進出棧。HndData采用單向FIFO雙鎖并發鏈表來管理出入列操作。其他小內存需求的均采用靜態數組或new操作。

五、內存需求
每個IoData等于一個分頁內存大小,信息頭大小為36Byte,有效使用內存是4060Byte,因此對GTcpSvr_AllocGBuf獲得的內存寫入時不應該超過4060(調用GTcpSvr_GetGbufSize獲得),所有IoData占用系統內存是:IoDataCount * PageSize(4096)。每個HndData大小是128Byte,加上每個Socket分配時耗內存約是:540Bytes(此為估計值,應以MS技術文檔為準),所有HndData耗系統內存是:HndDataCount * MAX_HNDDATA_AND_SOCKET_SIZE(128 + 540)。其他變量和數組可能耗得內存在10M之下。
綜上,整個模塊需求內存量是:UseMemSize = IoDataCount * PageSize + HndDataCount * MAX_HNDDATA_AND_SOCKET_SIZE + 10M。

資源截圖

代碼片段和文件信息

//?G-TcpServerLibDemo.cpp?:?定義應用程序的類行為。
//

#include?“stdafx.h“
#include?“G-TcpServerDemo.h“
#include?“G-TcpServerDemoDlg.h“

#ifdef?_DEBUG
#define?new?DEBUG_NEW
#endif


//?CGTcpServerDemoApp

BEGIN_MESSAGE_MAP(CGTcpServerDemoApp?CWinApp)
ON_COMMAND(ID_HELP?&CWinApp::onhelp)
END_MESSAGE_MAP()


//?CGTcpServerDemoApp?構造

CGTcpServerDemoApp::CGTcpServerDemoApp()
{
//?TODO:?在此處添加構造代碼,
//?將所有重要的初始化放置在?InitInstance?中
}


//?唯一的一個?CGTcpServerDemoApp?對象

CGTcpServerDemoApp?theApp;


//?CGTcpServerDemoApp?初始化

BOOL?CGTcpServerDemoApp::InitInstance()
{
//?如果一個運行在?Windows?XP?上的應用程序清單指定要
//?使用?ComCtl32.dll?版本?6?或更高版本來啟用可視化方式,
//則需要?InitCommonControlsEx()。否則,將無法創建窗口。
INITCOMMONCONTROLSEX?InitCtrls;
InitCtrls.dwSize?=?sizeof(InitCtrls);
//?將它設置為包括所有要在應用程序中使用的
//?公共控件類。
InitCtrls.dwICC?=?ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);

CWinApp::InitInstance();

//?標準初始化
//?如果未使用這些功能并希望減小
//?最終可執行文件的大小,則應移除下列
//?不需要的特定初始化例程
//?更改用于存儲設置的注冊表項
//?TODO:?應適當修改該字符串,
//?例如修改為公司或組織名
SetRegistryKey(_T(“應用程序向導生成的本地應用程序“));

CGTcpServerDemoDlg?dlg;
m_pMainWnd?=?&dlg;
INT_PTR?nResponse?=?dlg.DoModal();
if?(nResponse?==?IDOK)
{
//?TODO:?在此放置處理何時用
//??“確定”來關閉對話框的代碼
}
else?if?(nResponse?==?IDCANCEL)
{
//?TODO:?在此放置處理何時用
//??“取消”來關閉對話框的代碼
}

//?由于對話框已關閉,所以將返回?FALSE?以便退出應用程序,
//??而不是啟動應用程序的消息泵。
return?FALSE;
}

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件????????678??2010-04-29?22:29??說明.txt

?????文件??????45008??2010-04-29?22:29??Demos\G-TcpServerDemo\G-TcpServerDemo.aps

?????文件???????1724??2010-04-29?22:29??Demos\G-TcpServerDemo\G-TcpServerDemo.cpp

?????文件????????497??2010-04-29?22:29??Demos\G-TcpServerDemo\G-TcpServerDemo.h

?????文件???????6337??2010-04-29?22:29??Demos\G-TcpServerDemo\G-TcpServerDemo.rc

?????文件??????18852??2010-04-29?22:29??Demos\G-TcpServerDemo\G-TcpServerDemoDlg.cpp

?????文件???????1581??2010-04-29?22:29??Demos\G-TcpServerDemo\G-TcpServerDemoDlg.h

?????文件???????5853??2010-04-29?22:29??Demos\G-TcpServerDemo\G-TcpServerDllDemo.vcproj

?????文件???????1411??2010-04-29?22:29??Demos\G-TcpServerDemo\G-TcpServerDllDemo.vcproj.LEMO139.Administrator.user

?????文件???????1425??2010-04-29?22:29??Demos\G-TcpServerDemo\G-TcpServerDllDemo.vcproj.WINXP-20100323.Administrator.user

?????文件???????6007??2010-04-29?22:29??Demos\G-TcpServerDemo\G-TcpServerLibDemo.vcproj

?????文件???????1411??2010-04-29?22:29??Demos\G-TcpServerDemo\G-TcpServerLibDemo.vcproj.LEMO139.Administrator.user

?????文件???????1425??2010-04-29?22:29??Demos\G-TcpServerDemo\G-TcpServerLibDemo.vcproj.WINXP-20100323.Administrator.user

?????文件??????21630??2010-04-29?22:29??Demos\G-TcpServerDemo\res\G-TcpServerDemo.ico

?????文件????????373??2010-04-29?22:29??Demos\G-TcpServerDemo\res\G-TcpServerDemo.rc2

?????文件???????3128??2010-04-29?22:29??Demos\G-TcpServerDemo\resource.h

?????文件????????149??2010-04-29?22:29??Demos\G-TcpServerDemo\stdafx.cpp

?????文件???????1745??2010-04-29?22:29??Demos\G-TcpServerDemo\stdafx.h

?????文件???????1024??2010-04-29?22:29??Demos\G-TcpServerDemo\targetver.h

?????文件????????504??2010-04-29?22:29??Demos\G-TcpServerDemoD2010\G_TcpServerDemoD2010.dpr

?????文件???????4694??2010-04-29?22:29??Demos\G-TcpServerDemoD2010\G_TcpServerDemoD2010.dproj

?????文件?????????62??2010-04-29?22:29??Demos\G-TcpServerDemoD2010\G_TcpServerDemoD2010.dproj.local

?????文件????????356??2010-04-29?22:29??Demos\G-TcpServerDemoD2010\G_TcpServerDemoD2010.identcache

?????文件???????5280??2010-04-29?22:29??Demos\G-TcpServerDemoD2010\G_TcpServerDemoD2010.res

?????文件???????6741??2010-04-29?22:29??Demos\G-TcpServerDemoD2010\uGTcpServerDemoMainForm.dfm

?????文件??????10649??2010-04-29?22:29??Demos\G-TcpServerDemoD2010\uGTcpServerDemoMainForm.pas

?????文件????????917??2010-04-29?22:29??Demos\G-TcpServerDllDemo.sln

?????文件????????917??2010-04-29?22:29??Demos\G-TcpServerLibDemo.sln

?????文件??????37420??2010-04-29?22:29??Demos\G-TcpSvrRunInfo\G-TcpSvrRunInfo.aps

?????文件??????12455??2010-04-29?22:29??Demos\G-TcpSvrRunInfo\G-TcpSvrRunInfo.cpp

............此處省略27個文件信息

評論

共有 條評論