CxxConet: 基于协程的 C++ 网络开发框架 特点 * 跨平台:同时支持 Linux32/64、OSX64 两个平台,支持 C++11 及以上; * 易开发:同步的方式编写代码,支持类 Mina 的 filter 过滤链、简单而不失强大; * 高性能:可同时处理海量连接,框架无锁设计,性能超群; * 多特性:代码同步调用方式、支持网络过载保护、支持空闲连接自动清理等企业级特性; 示例: #include "ENaf.hh" static sp<ELogger> logger = ELoggerManager::getLogger("testnaf"); static void onListening(NSocketAcceptor* acceptor) { logger->trace("onListening..."); while (!acceptor->isDisposed()) { sleep(10); NIoServiceStatistics* ss = acceptor->getStatistics(); logger->trace_("ReadBytes=%ld", ss->getReadBytes()); logger->trace_("WrittenBytes=%ld", ss->getWrittenBytes()); } logger->trace("Out of Listening."); } static void onConnection(NSocketSession* session) { logger->trace("onConnection..."); sp<NIoBuffer> request; while(!session->getService()->isDisposed()) { try { request = dynamic_pointer_cast<NIoBuffer>(session->read()); } catch (ESocketTimeoutException& e) { logger->trace("session read timeout."); continue; } catch (EIOException& e) { logger->trace("session read error."); break; } if (request == null) { logger->trace("session client closed."); break; } // echo. session->write(request); } logger->trace("Out of Connection."); } int main(int argc, const char **argv) { // CxxJDK init. ESystem::init(argc, argv); // CxxLog4j init. ELoggerManager::init("log4e.conf"); NSocketAcceptor sa; NBlacklistFilter blf; blf.block("localhost"); sa.getFilterChainBuilder()->addFirst("black", &blf); sa.setListeningHandler(onListening); sa.setConnectionHandler(onConnection); sa.setMaxConnections(1000000); sa.setSoTimeout(3000); sa.setSessionIdleTime(NIdleStatus::WRITER_IDLE, 30); sa.bind("0.0.0.0", 8888); sa.listen(); ESystem::exit(0); return 0; }