跨平台高效能TCP伺服器框架 boost

2021-07-03 12:03:28 字數 2036 閱讀 7338

王子

基於boost的asio封裝的高效能tcp伺服器。asio已經有很好的事件封裝機制,只有底層事件,沒有針對tcp建立會話機制;也沒有多包進行合包,以包為單位的事件提交機制。由於以上多種原因,決定對boost庫進行更高的抽象和封裝,對開發者提供一種更為便利的使用介面。

本**實現了一下主要功能:

1.、為每個tcp客戶端建立session,每個session建立事件,向應用開發則投遞事件。

事件主要有3類:

(1)會話建立

(2)接收資料

(3)會話結束

2、為每個會話建立超時和跟蹤機制,提供在移動通訊ip變化情況下的裝置上下線判斷。

3、運用最新的c++11語法規範實現全部**(lamda override bind)

主函式呼叫例項:

#include "stdafx.h"

#include

#include "clientmessagefactory.h"

#include

#include

#include "mytcpserver.h"

using namespace klicen::asio::ip;

using namespace std;

using namespace klicen::utils;

void main(int argc, char* argv)

一、提供兩種呼叫方法:

1、原始tcpserver類,呼叫setmessagefactory繫結事件;

tcpserver tcp_server(10001);

tcp_server.setmessagefactory(shared_ptr (new clientmessagefactory));

2、繼承tcpserver類,重寫getmessagefactory方法;

mytcpserver my_tcp_server(10002);

二、clientmessagefactory類說明

1. 標頭檔案**

#pragma once

#include

class clientmessagefactory : public klicen::asio::ip::messagefactory

;備註:當用第一種方法呼叫tcpserver時,需要實現如下介面

virtual shared_ptr create(const string& session_id) override

2、原始檔**

備註:對handleread的呼叫,會出現一下的情況:

(1)收到乙個完整的包。deal_length = length,並且返回true就可以了;

(2)收到幾個完整包。deal_length=處理包長,將會把剩餘的未處理資料和長度再次呼叫handleread;

(3)收到不完整的包。deal_length = length,並且返回false就可以了,下次在收到資料,會把組合的資料和長度發給handleread;

(4)收到的包出錯。直接返回false,將會忽略本次收到的所有資料;

handleclose事件說明:

(1)handleclose事件不是及時呼叫,主要是為了在移動通訊ip位址變換的時候還能保證裝置的正常狀態(否則,裝置會不停上下線)

(2)可以設定session的超時時間,在超時時間都沒有資料收發操作,將會觸發handleclose事件;

response引數說明:

(1)賦值後,會自動將資料應答到客戶端;

三、新特性

2、呼叫簡單,使用者不需要傳遞io_service;

3、介面多樣,支援多種tcpserver呼叫;

4、伺服器自帶publishone和publishall方法,可指定session或者全部session傳送資料;

5、自帶unorderedmapsafe的執行緒安全hash map,保證多執行緒的正確性;

6、每個事件都有response訊息,當賦值時自動應答資料到客戶端,非常適合經典問答模式;

7、效能突出,所有應答都是非同步模式;

有問題,請及時反饋,我好更正

高效能的伺服器處理框架

終於開始學習epoll了,雖然不明白的地方還是很多,但從理論到實踐,相信自己動手去寫乙個具體的框架後,一切會清晰很多。1 首先需要乙個記憶體池,目的在於 減少頻繁的分配和釋放,提高效能的同時,還能避免記憶體碎片的問題 能夠儲存變長的資料,不要很傻瓜地只能預分配乙個最大長度 基於slab演算法實現記憶...

Linux 高效能伺服器程式框架

伺服器解構主要分為如下三個主要模組 1 i o處理單元。接收客戶端傳送的資料都屬於i o處理單元。2 邏輯單元。接收到資料之後進行的一些處理都屬於邏輯單元。3 儲存單元。如下圖所示 伺服器程式設計框架 1 c s模型 c就是客戶端,s就是伺服器。所以這個模型也稱客戶端 伺服器模型。c s模型如下圖所...

高效能伺服器設計

原文 http blog.chinaunix.net u 5251 showart 236329.html 先後檢視了 haproxy l7sw 和lighttpd 的相關原始碼,無一例外,他們一致認為多路復用是效能最好的伺服器架構 事實也確實應該如此,程序的出現一方面就是為了儲存任務的執行上下文從...