DIOCP 一 DIOCP常見問題。

2021-06-28 03:34:40 字數 2062 閱讀 1927

1,iocp是什麼?

答:iocp是windows下的伺服器技術,並不是所有windows都能使用iocp,只能在支援iocp的windows作業系統上使用。

2,diocp是什麼?

答:diocp是delphi實現的iocp伺服器。

3,diocp可以跨平台嗎?

答:不可以,只能在支援iocp的windows下使用,目前還沒有可以跨平台使用的伺服器技術;在linux下的伺服器技術是epoll。

4,我可以用不同語言開發的客戶端同diocp連線通訊嗎?

答:完全可以,diocp建立socket,監聽所有連線過來的socket,客戶端只要能夠用socket同diocp連線,就可以使用。

5,diocp對多顆cpu優化了嗎?

答:是的,diocp的工作執行緒是根據cpu核心數進行建立的,在開啟服務時為工作執行緒,優先使用cpu的核。

6,diocp像indy伺服器那樣實現了各類協議的伺服器嗎?比如http、ftp等?

答:沒有,diocp僅僅實現了最底層的通訊服務,並沒有像indy伺服器那樣實現了http、ftp等。這些http、ftp是通訊協議,如果需要,可以遵照這些協議實現它們。

7,diocp伺服器有心跳檢測功能嗎?

答:diocp有,但是diocp3預設是關閉狀態,也就是說不對客戶端做心跳包檢測,為什麼這樣做,因為客戶端可能是不同語言開發的,很可能有的客戶端對伺服器主動心跳檢測不回應,如果diocp伺服器主動心跳檢測,那麼可能會畫蛇添足了,所以diocp把心跳檢測留給使用者自己實現了。關於diocp心跳,作者寫了一篇文章:

8,如果更好實現diocp的心跳檢測?

答:最好是客戶端主動傳送心跳包給伺服器,同時伺服器定時對每個socket做連線超時檢測。

a,客戶端主動傳送心跳包給伺服器:客戶端定時(不要超過伺服器端允許的最大等待時間)給伺服器傳送心跳包,伺服器端接收到心跳包時候,更新當前socekt的心跳包                檢測時間,便於伺服器端進行連線超時檢測。

b,伺服器定時對每個socket做連線超時檢測:伺服器定時對每個連線socekt的心跳包時間進行判斷,判斷最後檢測到心跳包時間是否超過了允許的最大時間,如果超過,則             主動埠這個socket。

9,diocp不能滿足我需求,我應該怎麼擴充套件它呢?

答:當diocp不能滿足需求時候,我們可以採用繼承已有類的方式擴充套件,這種方式目前我認為是比較好的方式,如果diocp保持已經發布功能穩定的前提下,不會影響到            diocp的公升級。diocp伺服器中兩個類和客戶關係最密切,擴充套件時候應該首先關注這兩個類:tiocptcpserver和tiocpclientcontext。

tiocptcpserver:是diocp實現的iocp伺服器的管理類,它負責iocp的建立和服務等具體工作,我們要使用diocp,第乙個要使用的類就是它。如果想擴充套件diocp,我們應該認真看一下這個類,是否需要擴充套件它。

tiocpclientcontext,對客戶端socekt封裝的類,實現了很多功能。如果我們想擴充套件diocp,很可能需要擴充套件這個類,如果真的擴充套件這個類,那麼在diocp伺服器建立時候,一定要注意使用registercontextclass去註冊這個類,引數就是我們擴充套件了的tiocpclientcontext類,這樣在tiocptcpserver接收到客戶端之後,加入到管理列表中的類都是我們擴充套件的類了。這樣做之後,我們在diocp伺服器裡面編寫**時候,是否可以啊?肯定可以的,diocp很多引數都是使用tiocpclientcontext,實際上這是父類,我們編寫的類是子類,允許向上轉型,我們無需擔心不能使用自己擴充套件的類,放心擴充套件使用吧!

10,我的業務邏輯**應該在**實現?

答:我們看diocp的echo伺服器的例子,在「onrecvbuffer」裡面接收客戶端資料,我們要知道diocp是阻塞式socekt,這意味著,如果當前這個socekt的任務沒有處理完畢,客戶端將一直等待下去,這也會占用乙個伺服器端執行緒,降低處理速度。如果是非常簡單的任務,可以直接在這裡處理,如果複雜業務,那麼我覺得不應該在這裡處理了,目前diocp提供了iocptask,我們應該使用這個技術來對邏輯業務處理。diocp作者對iocptask做了介紹:

11,diocp例子都是什麼內容?

答:diocp作者對demo做了詳細描述:

nginx 常見問題一

在開始處理乙個http請求時,nginx會取出header頭中的host變數,與nginx.conf中的每個server name進行匹配,以此決定到底由哪乙個server來處理這個請求,但nginx如何配置多個相同的server name,會導致server name出現優先順序訪問衝突。root...

常見問題 朗動常見問題

常見問題一 方向盤變沉 檢查胎壓是否正常,輪胎是否過度磨損。助力幫浦不工作,前輪氣壓低。冬天的話,冷車在冬天助力油比較稠,方向會重一點。檢查轉向助力油。1 應該是是助力系統有問題或則助力潤滑油有問題。2 如果你在駕車時感覺方向盤變緊,汽車偏向一側,需要檢查輪胎,或進行車輪平衡 定位。在這些問題剛剛發...

Hibernate一之常見問題

1.hibernate中物件的三種狀態。瞬時狀態 或臨時狀態 資料庫種沒有對應記錄,同時沒有被session管理,即new出來的新例項 持久化狀態 資料庫中有對應的記錄,同時被session管理。特點 修改了物件的屬性值,其資料庫中的對應的字段也會同步修改 游離狀態 資料庫中有對應的記錄,同時脫離了...