st_asio_wrapper使用FAQ(2019.10.17更新)

Q:tcp服務端(server_base)和tcp客戶端(client_socket_base)都有個函數set_server_addr,有何區別?

A:典型的網絡編程基本知識,服務端設置的是監聽地址,客戶端設置的是連接地址,這個問題並不是st_asio_wrapper特有的,屬於網絡編程基礎知識。

Q:如何不讓client_socket_base重連接?

A:重連接分兩種情況,首次連接和斷線之後的連接,st_asio_wrapper做一樣的處理。當連接失敗,或者連接斷開之後,client_socket_base會回調prepare_reconnect虛函數,期望得到一個單位爲毫秒的整數值,如果這個值大於等於0,則在相應毫秒數之後,開始重連接,如果小於0,則不再重連接。
另外,如果你重寫了on_recv_error,並且沒有調用父類的同名函數,則也不會重新連接服務器(這種情況專指斷線之後的重連)。

Q:什麼是service,爲什麼有些時候service會自動退出?

A:從i_service繼承得到的對象都是service對象,他們負責所有網絡事件的調度,還有比如定時器之類。當service沒有事可做的時候,就自動退出了(這是asio的設計),之前的st_asio_wrapper本來不會有service退出的情況,但最近由於添加了重連次數功能,所以客戶端有可能會自動退出service(使用者放棄重連接)。那麼如何防止客戶端service自動退出呢,答案是定義ST_ASIO_AVOID_AUTO_STOP_SERVICE宏。

Q:爲什麼沒有連接失敗的事件?

A:在收到on_connect回調之前,都是連接失敗的狀態,不需要事件;如果已經成功的連接斷開了,則會收到on_recv_error回調。

Q:接口被重寫了,還需要調用父類的同名函數嗎?

A:這個要看函數的具體功能,比如初始化之類的虛函數,重寫之後,在最後一定要調用父類的同名函數,如果你不需要父類的邏輯(或者父類根本沒有邏輯,比如on_msg_send),或者你的邏輯已經包括了父類的邏輯,則可以不調用父類的同名函數。

Q:如何不讓st_asio_wrapper輸出到控制檯?

A:定義ST_ASIO_NO_UNIFIED_OUT,則st_asio_wrapper裏面所有輸出就失效了(demo裏面的輸出不會失敗,因爲是直接使用的crt函數,比如printf)。

Q:st_asio_wrapper的類繼承層次是怎樣的?

Q:st_asio_wrapper主要業務時序圖?

客戶端連接時序圖

服務端接受連接時序圖

消息接收並處理時序圖,不使用消息緩存(客戶端和服務端完全一樣)

消息接收並處理時序圖,使用消息緩存(客戶端和服務端完全一樣)

消息發送時序圖(客戶端和服務端完全一樣,圖片有點小錯誤,send_msg之後只是post一個消息給service_pump,然後在異步回調裏面調用async_write)

Q:如何防止端口重用?

A:定義ST_ASIO_NOT_REUSE_ADDRESS宏。

 

Q:下載地址在哪裏?

git:https://github.com/youngwolf-project/st_asio_wrapper/,ascs在與st_asio_wrapper同級目錄裏面,另外,我的資源裏面也有下載,但不是最新的。
QQ交流羣:198941541,這裏面有每個版本的壓縮包,全是最新的。

 

Q:在linux下如何編譯demo?

release 版本是make;
debug版本是make debug。

 

 

C/S框架 st_asio_wrapper 開發教程(五)

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