王子
基於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 的相關原始碼,無一例外,他們一致認為多路復用是效能最好的伺服器架構 事實也確實應該如此,程序的出現一方面就是為了儲存任務的執行上下文從...