到上一篇,一个完整的单线程版本就出现了。如果并发要求不高的话,单线程+异步I/O已经足够了。
但是如果想支持大并发,自然需要尽可能的利用服务器上的多个CPU和核。
现在首先把之前的工程改成cmake工程。
顶层目录的CMakeLists.txt内容如下:
cmake_minimum_required(VERSION 2.8)
project (TcpTemplate)
add_subdirectory(src bin)
src目录下的CMakeLists.txt文件配置:
cmake_minimum_required(VERSION 2.8)
set(CMAKE_BUILD_TYPE Debug)
set(PROJECT_INCLUDE_DIR ../include)
find_package(Boost COMPONENTS system filesystem thread REQUIRED)
include_directories(${Boost_INCLUDE_DIR} ${PROJECT_INCLUDE_DIR})
AUX_SOURCE_DIRECTORY(${CMAKE_SOURCE_DIR}/src CPP_LIST1)
AUX_SOURCE_DIRECTORY(${CMAKE_SOURCE_DIR}/src/core CPP_LIST2)
add_executable(service ${CPP_LIST1} ${CPP_LIST2})
target_link_libraries(service ${Boost_LIBRARIES})
add_definitions(-Wall)
好,现在看一下main.cc,没有什么太大变化,只是把Server类的代码剥离出去了。
#include <iostream>
#include "core/server.h"
using namespace std;
int main(int argc,char ** argv) {
try {
io_service iosev;
tcp::endpoint listen_endpoint(tcp::v4(), 8888);
Server server(iosev, listen_endpoint, 10);
server.Run();
} catch(std::exception const& ex) {
cout << "Exception: " << ex.what() << "";
}
}
Server类和Connection类都放在c