KonsanNet 網絡通信框架實現(第二章)— 會話管理

框架源碼地址

       GitHub:https://github.com/KonsanAlide/KonsanNet

章前闡述

       近幾天有些忙,就沒繼續接着上一章寫,今天有些空,補充下。

       版本0.3往框架裏面加入了一個會話管理模塊,加入驗證功能。

       版本0.3依然使用一個監聽線程來接受連接,並沒有用AcceptEx函數(Windows),也沒有把監聽的socket加入到iocp模型或者epoll模型中去。

      版本0.3依然是使用了在消息處理線程裏面直接發送數據的,Windows版本用阻塞模式來發送數據(沒有使用重疊IO),Linux版本用非阻塞模式發送。

 

會話管理

       本框架Version0.3後支持會話管理功能,主要是起到簡單的用戶管理認證功能,以及多通道支持功能。在本框架裏面,通信連接通道可以有很多種類型:主消息通信類型、次要消息通信類型、大數據傳輸類型、對象傳輸類型,當然還可以自己定義其它類型。一個會話管理一個客戶端發起的多個連接,一個會話對象必須包含一個主消息通道,會話起到的作用是管理該會話下的多個連接通道之間的交互協同。當然一個客戶端也可以申請多個會話。一個會話就像一個沙箱,會話內的元素可以互相交互,但會話之間是隔離的。

       當一個客戶端向服務端發起連接時,默認的連接通道類型是主消息類型,而且第一個數據包必須是會話登陸包,否則被認爲是非法連接,連接會被服務端直接中斷。如果會話登陸包驗證正確,服務端產生一個會話對象,把該連接加入該會話作爲主消息通道,同時產生一個唯一的會話ID和對其它通道的驗證信息。主消息通道主要用於對其它通道的管理配置、以及心跳等功能。服務端對主消息通道驗證成功後會返回會話ID和驗證碼信息給客戶端,客戶端可以在該會話下建立其它類型的連接通道,用於大數據傳輸、RPC等功能,其它通道連接到服務端時,第一個包也必須是會話登陸包,需要把會話ID和驗證碼放在會話登陸包中發送給服務端,服務端對會話ID和驗證碼以及驗證碼的有效時間進行驗證,驗證失敗則中斷該連接。

        簡單的應用場景如下:

        客戶端要和服務端之間進行文件傳輸,客戶端連接上服務端後產生一個會話,會話的主消息通道用來進行消息通信、心跳、租約、數據通道配置管理等,數據通道就專門用來傳輸數據塊,如果需要多個文件同時傳輸,可以開多個數據通道,如果數據文件比較大,也可以開多個通道來進行分塊傳輸。

 

最後

        本來想抽時間來做下性能測試,看下Windows和Linux平臺下服務端的性能,給大家一個明確的數據,不過今天晚上簡單測試了下,發現在家中的PC上每秒的連接數和iops都有點低,每秒能接受的連接數平均是6000左右,每秒能處理的IO數目在11000左右,我正在尋找原因。

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