利用boost asio實現乙個簡單的伺服器框架

2021-04-20 02:59:04 字數 964 閱讀 6463

boost::asio是乙個高效能的網路開發庫,windows下使用iocp,linux下使用epoll。與ace不同的是,它並沒有提供乙個網路框架,而是採取元件的方式來提**用介面。但是對於常見的情況,採用乙個好用的框架還是能夠簡化開發過程,特別是asio的各個非同步介面的用法都相當類似。

受到 sp server

框架的影響,我使用asio大致實現了乙個多執行緒的半非同步半同步伺服器框架,以下是利用它來實現乙個echo伺服器:

1. 實現**:

static

void

onsessionstarted(sessionptr 

const

&session)

static

void

onsession(

sessionptr 

const

&session)

2. 乙個單執行緒的echo伺服器:

void

server_main()

3. 乙個多執行緒的echo伺服器(半非同步半同步:乙個主線程,4個工作者執行緒)

void

server_main2()

其中主要用到了兩個類,session和asioserver,大約有以下介面:

struct

session

;struct

asioservice

;struct

asioserver : 

public

asioservice

;有了這樣乙個思路,實現起來就很容易了。重點是以下兩點:

1。緩衝區的管理與記憶體池的使用

2。為了保證session的執行緒安全,必須要設定乙個掛起狀態。

還有乙個好處,就是完全隔絕了asio的應用介面,不用再忍受asio漫長的編譯時間了。**就不貼在這裡了,有興趣的可以通過email **。

利用CoreAnimation實現乙個時間的進度條

那麼接下來就是如何用coreanimation實現乙個進度條控制項了。首先呢,讓我們建立乙個繼承自cashapelayer的wkprogressbarlayer。wkprogressbarlayer預設自身的bounds就是整個進度條的大小。inte ce wkprogressbarlayer ca...

利用CoreAnimation實現乙個時間的進度條

那麼接下來就是如何用coreanimation實現乙個進度條控制項了。首先呢,讓我們建立乙個繼承自cashapelayer的wkprogressbarlayer。wkprogressbarlayer預設自身的bounds就是整個進度條的大小。inte ce wkprogressbarlayer ca...

利用 Proxy API 實現乙個簡易 MVVM

vue 3 使用了 proxy api,有些手癢,就弄乙個簡單的結構玩玩吧。proxy api 見 mdn proxy 依賴收集 mvvm 初始化時劫持資料,並設定觀察者 dep。模仿 vue 結構是在 get 時往觀察者 dep 推入被觀察者 watcher,然後 set 時讓觀察者通知所有被觀察...