1. 程式人生 > >Thrift之C++ 非同步連線池例項

Thrift之C++ 非同步連線池例項

#include <thrift/concurrency/ThreadManager.h>
#include <thrift/concurrency/PosixThreadFactory.h>
#include <thrift/server/TThreadPoolServer.h>
#include <thrift/server/TThreadedServer.h>

using namespace ::apache::thrift;
using namespace ::apache::thrift::protocol;
using namespace ::apache::thrift::transport;
using namespace ::apache::thrift::server;
using namespace ::apache::thrift::concurrency;

using boost::shared_ptr;

int port = 9090;
shared_ptr<serDemoHandler> handler(new serDemoHandler());
shared_ptr<TProcessor> processor(new serDemoProcessor(handler));
shared_ptr<TServerTransport> serverTransport(new TServerSocket(port));
shared_ptr<TTransportFactory> transportFactory(new TBufferedTransportFactory());
shared_ptr<TProtocolFactory> protocolFactory(new TBinaryProtocolFactory());

shared_ptr<ThreadManager> threadManager = ThreadManager::newSimpleThreadManager(10);//指定10個執行緒數
shared_ptr<PosixThreadFactory> threadFactory = shared_ptr<PosixThreadFactory>(new PosixThreadFactory());
threadManager->threadFactory(threadFactory);
threadManager->start();
TThreadPoolServer server(processor,serverTransport,transportFactory,protocolFactory,threadManager);//使用執行緒池
//TNonblockingServer server(processor,protocolFactory,port);//不使用執行緒池

server.serve();

Windows下將PosixThreadFactory換成PlatformThreadFactory

#include <thrift/concurrency/ThreadManager.h>
#include <thrift/concurrency/BoostThreadFactory.h>
#include <thrift/server/TThreadPoolServer.h>
#include <thrift/server/TThreadedServer.h>

using namespace ::apache::thrift;
using namespace ::apache::thrift::protocol;
using namespace ::apache::thrift::transport;
using namespace ::apache::thrift::server;
using namespace ::apache::thrift::concurrency;

using boost::shared_ptr;

int port = 9090;
shared_ptr<TestHandler> handler(new TestHandler());
shared_ptr<TProcessor> processor(new TestProcessor(handler));
shared_ptr<TServerTransport> serverTransport(new TServerSocket(port));
shared_ptr<TTransportFactory> transportFactory(new TBufferedTransportFactory());
shared_ptr<TProtocolFactory> protocolFactory(new TBinaryProtocolFactory());
try
{
		shared_ptr<ThreadManager> threadManager =ThreadManager::newSimpleThreadManager(10);
		boost::shared_ptr<PlatformThreadFactory> threadFactory = boost::shared_ptr<PlatformThreadFactory>(new PlatformThreadFactory());
		threadManager->threadFactory(threadFactory);
		threadManager->start();
		//TThreadPoolServer server(processor,serverTransport,transportFactory,protocolFactory,threadManager);//使用執行緒池
		TNonblockingServer server(processor,protocolFactory,port);

		printf("Starting the server...\n");
		server.serve();
		printf("done.\n");
}
catch (...)
{
	
}

相關推薦

ThriftC++ 非同步連線例項

#include <thrift/concurrency/ThreadManager.h> #include <thrift/concurrency/PosixThreadFacto

javaweb事務與連線

事務 什麼是事務? 轉賬: 給張三賬戶減1000元 給李四賬戶加1000元 當給張三賬戶減1000元后,丟擲了異常!這會怎麼樣呢?我相信從此之後,張三再也不敢轉賬了。 使用事務就可以處理這一問題:把多個對資料庫的操作繫結成一個事務,要麼都成功,要麼都失

UnityC#——非同步委託開啟執行緒,三種方法檢測結束

Unity之C#——非同步委託開啟執行緒,三種方法檢測結束 原始碼如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using

c#資料庫連線Hikari

Hikari是我自定義的資料庫連線池,前面已經提供了地址。因為c#的連線池按照規範的ADO.NET裡面實現定義的。由資料庫官方提供,但是實現方式就不知道了,反正沒有看出來,估計一般是連線類實現的,但是沒有看出來怎麼使用的。 對其升級重構: 重新設計快取池,消除鎖,使用安全棧,提升效能。所有的設定均採用狀態

撩課-JavaWeb什麼是連線連線使用

什麼是連線池 沒有連線池的情況 每次CRUD操作都要使用資料庫的時候,都要建立一個數據庫連線物件 普通的JDBC資料庫連線使用 DriverManager 來獲取 每次向資料庫建立連線的時候都要將 Connection 載入到記憶體中 然後再驗證使用者名稱和密碼花費時間0.0

redis叢集連線例項

之前寫了一個單機版的redis連線池例項,這裡我在本機搭建了三個redis服務作為測試。 連線池示例: import java.util.ArrayList; import java.util.HashSet; import java.util.List;

二十四、併發程式設計簡易資料連線

public class MyDataSource { private LinkedList<Connection> pool = new LinkedList(); //連結串列放連線池用 private static final int INIT_CONNECTION

【轉】C# Sql連線

使用連線池 連線到資料庫伺服器通常由幾個需要軟長時間的步驟組成。必須建立物理通道(例如套接字或命名管道),必須與伺服器進行初次連線,必須分析連線字串資訊,必須由伺服器對連線進行身份驗證,等等。 實際上,大部份的應用程式都是使用一個或幾個不同的連線配置。當應用程式的資料量和訪問

Jedis簡介,Jedis連線 HelloWorld實現,設定redis連線密碼,Jedis 連線例項

Jedis簡介 實際開發中,我們需要用Redis的連線工具連線Redis然後操作Redis, 對於主流語言,Redis都提供了對應的客戶端; Jedis連線 HelloWorld實現 建一個Maven專案, pom里加下jedis依賴, 1 2 3 4

ADO.NET入門教程細說資料庫連線

摘要今天我要講的是資料庫連線池。說實話,我表示鴨梨很大。因為相比其他章節來說,連線池相對來說難理解一點。我要用最通俗的語句給大家講明白,講透徹卻也不是一件很容易的事。但是,連線池又是非常重要的知識點,特別是在部署多使用者程式時,顯得尤為重要。所以,我不但要講,而且要講的透徹。

linux c/c++ 後臺開發連線

在網際網路後臺開發中經常需要需要範圍一些公共資源,如DB,cache, MQ,  最典型的的就是mysql, memcached, redis, 以及一些代理服務; 通常在高併發,高訪問量的情況下,起停連線,是不合適的,也容易將連線佔滿, 尤其是工作執行緒多的情況,如果每個

asp.net連線access資料庫c#篇 例項

<%@ Page Language="C#" ContentType="text/html" ResponseEncoding="gb2312" %><%@ Import Namespace="System.Data"%><%@ Import Namespace="System.

NodeJS C++ AddonsC++類例項包裝與非同步操作

本文是對NodeJS C++ Addons原生寫法的進一步探索,介紹了利用原生的Node和V8提供的API實現類包裝和非同步呼叫的具體做法。在閱讀本文之前,如果對NodeJS C++ Addons的基礎不熟悉的話,建議先閱讀上一篇部落格【NodeJS C++ A

資料庫連線DB2

   最近專案開發遇到一個問題,當資料量過大時會導致系統崩潰,經過排查,發現是每一次操作資料庫都建立一次資料連線,當資料量太大,就會導致程式無法負載從而宕機。 而後進行程式碼改造,改用資料庫連線池。目前使用資料庫連線池有兩種方式,使用配置檔案以及不使用配置檔案!   第一種:  不使

Sping boot加入Druid連線異常Error creating bean with name 'dataSource'

配置Druid資料連線池之後一直報錯找不到資料來源 org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userController': Unsatisf

MyBatis原始碼解析資料來源(含資料庫連線簡析)

一.概述: 常見的資料來源元件都實現了javax.sql.DataSource介面; MyBatis不但要能整合第三方的資料來源元件,自身也提供了資料來源的實現; 一般情況下,資料來源的初始化過程引數較多,比較複雜; 二.設計模式: 為什麼要使用工廠模式     資料來

JavaWeb 15.JDBC提高(事物和資料庫連線)

## 事務和資料庫連線池 ## **事務**          1.什麼是事務:一組邏輯上的操作,要麼全都成功,要麼全都失敗。     2.模擬事務的操作     &nb

SpringBoot初始教程資料庫連線(druid)

SpringBoot初始教程之資料庫連線池(druid) 1.介紹 Druid是一個JDBC元件庫,包括資料庫連線池、SQL Parser等元件。DruidDataSource是最好的資料庫連線池。SpringBoot支援任何一種資料庫連結池的配置,在這裡用druid作為例子進行講解 2

Java——Web開發開源的資料庫連線(C3P0與DBCP)的使用

緊接上一篇資料庫連線池的學習,點連線直達~   資料庫連線池的簡單理解與使用 資料庫連線池DBCP程式碼連線與配置檔案: 1.先匯入使用的jar檔案,分別是dbcp.jar與pool.jar檔案 2.分別使用兩種方式實現,使用配置檔案(dbcpconfig.

Java——Web開發事務與資料庫連線

事務:指的是一組操作,裡面包含許多個單一的邏輯,只要有一個邏輯沒有執行成功,那麼都算失敗,所有的資料都回到最初的狀態。事務在預設情況下是自動提交的。(事務指標對連線物件)   1.事務的簡單使用 1).關閉自動提交的設定 conn.setAutoCommit(fal