日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

Newlife.Net QA

發布時間:2024/7/5 asp.net 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Newlife.Net QA 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

?

?

Q1:當數據包很大時,客戶端可以成功發送大的數據包,為什么服務端收到的數據包卻被限制為緩沖區的大小64K?

A1:

這里傳入的參數SocketAsyncEventArgs實例即e的緩沖區大小為64K,并不是客戶端發送的600K,這個緩沖區的大小是由se決定的? 經驗證(增大se的緩沖區大小,使它大于發送的數據包大小,則數據包可以正確接收),上述推斷正確。

Q2: 有新會話的處理,NewSession的回調問題,NewSession的回調函數被綁定為Server_NewSession,不是會遞歸調用這個函數,造成死循環?

A2 :這里需要注意的是,雖然Server_NewSession是在NetServer中定義的,NetServer的NewSession委托卻并沒有被指定為Server_NewSession.例如,對于TCP通信,啟動TCPServer進行監聽初始化時,會對TCPServer的NewSession綁定,TCPServer繼承自ISocektServer,所以TCPSerever的NeSession被綁定為Server_NewSession,而NetServer中的NewSession默認為null,不會造成遞歸調用,從而形成死循環。

?

梳理一下自定義服務器的實現流程:

?自定義服務器:NetServer<自定義服務器對應的Session> ,通過調用NetServer.Start()函數啟動,進一步調用NetServer.OnStart()方法,在此方法中根據協議類型創建了TCP,UDP,IPv4,IPv6的服務器實例(如TCPServer),對服務器實例綁定NewSession事件。對于TCPServer,當收到Accept請求時,創建Session,并觸發NewSession,執行上面的函數;對于UPDServer,會直接觸發receive。

? ? ? 處理accept 或者receive是又服務器實例類型決定的,TCPServer和UDPServer的Start函數內容不同。

?

Q3:?

?

? ? ? ?這個事件是在哪里定義的回調函數?具體回調流程處理又是怎樣?

A2:

? ? ? 有兩個地方定義了Received事件,一個是服務器的,一個是會話的,注意區分。

? ? ?1.服務器(NetServer繼承自IServer)

?

? 2.會話(INetSession)

?

這個事件回調函數的定義在有新的會話進入時(對TCP是有新的連接,對UDP是收到新的數據包)

可以看到,回調函數被定義為OnReceived,這里是處理的Session的Received。同上,并沒有對NetServer定義的Received進行綁定,所以這里的Received為null

這里提供了一個鉤子,最后的OnReceive對會話和packet處理可以在自定義服務器中進行處理 。

雖然進行了復雜的綁定,但在TCP通信時,收包事件觸發后并沒有通過觸發OnReceived調用OnReceive,而是直接調用的OnReceive函數

?

轉載于:https://www.cnblogs.com/mbaymax/p/11357614.html

總結

以上是生活随笔為你收集整理的Newlife.Net QA的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。