获得徽章 0
最新 热门
  • CxxJDK: 山寨 JDK 实现的 C++ 强大类库 特点 * 跨平台:同时支持 Linux32/64、OSX64、Win64 等平台; * 高性能:同时具备 C/C++ 和 Java 并发库的优点,性能爆棚; * 类丰富:实现 JDK 丰富的类库,从此摆脱 C++ 贫类库的困境; * 易开发:先 java 开发,再使用 CxxJDK 进行翻译,So easy! 示例 java: public static void main(String[] args) { class Worker implements Runnable { @Override public void run() { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(String.format("thread %d finished", this.hashCode())); } } ThreadPoolExecutor executor = new ThreadPoolExecutor(100, 200, 10, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>()); executor.allowCoreThreadTimeOut(true); for (int i = 0; i < 200; i++) { executor.execute(new Worker()); } executor.shutdown(); } //===================================== c++: int main(int argc, const char **argv) { ESystem::init(argc, argv); //cxxjdk 初始化! class Worker : public ERunnable { public: virtual void run() { try { EThread::sleep(1000); } catch (EInterruptedException& e) { e.printStackTrace(); } ESystem::out->println(EString::formatOf("thread %d finished", this->hashCode()).c_str()); } }; EThreadPoolExecutor* executor = new EThreadPoolExecutor(100, 200, 10, ETimeUnit::SECONDS, new ELinkedBlockingQueue<ERunnable>()); executor->allowCoreThreadTimeOut(true); for (int i = 0; i < 200; i++) { executor->execute(new Worker()); } executor->shutdown(); executor->awaitTermination(); delete executor; // 对象资源释放! }
  • 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; }
    CxxConet: 基于协程的 C++ 网络开发框架
  • CxxMina: 山寨 Mina2.0 实现的 C++ 强大 NIO 网络开发框架 特点 * 跨平台:同时支持 Linux32/64、OSX64、Win64 等平台; * 高性能:同时具备 C/C++ 和 Java 并发库的优点,性能爆棚; * 易开发:先 java 开发,再使用 cxxjdk 进行翻译,So easy! * 强山寨:Mina 核心功能有的我都有,Mina 没有的我也可以有! 示例: #include "Eio.hh" #include "ELog.hh" static sp<ELogger> logger = ELoggerManager::getLogger("testeio"); static volatile boolean gRunning = true; class DemoIoHandler: public EIoHandler { void sessionCreated(sp<EIoSession>& session) THROWS(EException) { logger->trace("sessionCreated"); session->getConfig()->setIdleTime(EIdleStatus::BOTH_IDLE, 1); } void sessionOpened(sp<EIoSession>& session) THROWS(EException) { logger->trace("sessionOpened"); } void sessionClosed(sp<EIoSession>& session) THROWS(EException) { logger->trace("sessionClosed"); } void sessionIdle(sp<EIoSession>& session, EIdleStatus status) THROWS(EException) { logger->trace("sessionIdle"); } void exceptionCaught(sp<EIoSession>& session, sp<EThrowableType>& cause) THROWS(EException) { logger->trace("exceptionCaught"); session->closeNow(); } void messageReceived(sp<EIoSession>& session, sp<EObject>& message) THROWS(EException) { logger->trace("messageReceived, sessionid=%d", session->getId()); // response. EIoBuffer *out = EIoBuffer::allocate(100); out->buf()->put("HTTP/1.1 200 OK\r\nContent-Length: 11\r\nContent-Type: text/html\r\n\r\nHello,world", 75); out->flip(); session->write(out); // close session->closeOnFlush(); } void messageSent(sp<EIoSession>& session, sp<EObject>& message) THROWS(EException) { logger->trace("messageSent"); } void inputClosed(sp<EIoSession>& session) THROWS(EException) { logger->trace("inputClosed"); session->closeNow(); } }; int main(int argc, const char **argv) { // CxxJDK init. ESystem::init(argc, argv); // CxxLog4j init. ELoggerManager::init("log4e.properties"); try { ENioSocketAcceptor *nsa = new ENioSocketAcceptor(); ELoggingFilter* lf = new ELoggingFilter(); nsa->getFilterChain()->addLast("logger", lf); EProfilerTimerFilter *ptf = new EProfilerTimerFilter(); nsa->getFilterChain()->addLast("profile", ptf); DemoIoHandler* dih = new DemoIoHandler(); nsa->setHandler(dih); EInetSocketAddress isa(8888); //listen port. nsa->setReuseAddress(true); nsa->bind(&isa); while (gRunning) { // do something. EThread::sleep(1000); } nsa->dispose(true); delete nsa; delete dih; delete lf; delete ptf; } catch (EThrowable& e) { e.printStackTrace(); } ESystem::exit(0); return 0; }
  • 个人成就
    文章被点赞 64
    文章被阅读 5,416
    掘力值 179
    收藏集
    0
    关注标签
    19
    加入于