2014-05-02 63 views
1

我目前有以下使用Thrift發佈到Flume的C++代碼,但我需要以非阻塞方式執行同樣的操作,並在Node.js中使用回調。是否有可能將Thrift代碼轉換爲異步

boost::shared_ptr<TTransport> socket(new TSocket(logger->host_.c_str(), logger->port_)); 
boost::shared_ptr<TTransport> transport(new TFramedTransport(socket)); 
boost::shared_ptr<TProtocol> protocol(new TCompactProtocol(transport)); 
map <string,string> headers; 
try { 
    ThriftSourceProtocolClient client(protocol); 
    transport->open(); 
    ThriftFlumeEvent evt; 

    //headers["host"] = std::string(hostname); 

    evt.headers = headers; 
    evt.body = message; 

    client.append(evt); 
    transport->close(); 
} catch(...) { 
    cerr << "\tException raised!" << endl; 
} 

具體來說,Java API的具有AsyncClient,是否爲C++存在,並且它記錄任何地方。到目前爲止,Google尚未幫助我。

+0

Randy Abernethy本週向Thrift添加了支持,以便在JavaScript中使用TCompactProtocol,所以這變得不必要了。我確實取得了進展,我發現需要在COB模式下編譯Thrift擴展,然後才能獲得異步存根,但我無法確定如何創建正確的C++對象來使用這些存根。 C++不是我最強的語言。 – AaronM

回答

0

您可以使用libuv進行異步工作。 NodeJS也使用這個庫進行異步操作

+0

如果我在做標準套接字io,那會很好,但是我也可以編寫異步代碼。問題是追加呼叫需要拆分,因此不會阻塞。我不明白libuv如何做到這一點。我看到節儉項目如何使用它來實現非阻塞版本。 – AaronM

0

不是不可能的,或者看起來如此。我現在正在做同樣的工作,但我還沒有完成它的工作。

我發現了兩個有用的鏈接,可能是一些使用到你:

A C++ client implementation,有一些歸類與此Java implementation

缺少比特的幫助也有一些很酷的想法Boost.Asio的關於Apache JIRA爲THRIFT-1

它看起來像所有的信息是有,但我還是有點糊塗了:)

H個

相關問題