2014-05-02 2 views
1

В настоящее время у меня есть следующий код на C++, который отправляется в Flume с помощью Thrift, но мне нужно сделать то же самое неблокируемым способом с обратным вызовом для использования в Node.js.Можно ли преобразовать код Trrift в Async

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

Поддержка была добавлена ​​в Thrift на этой неделе Рэнди Абернети, чтобы включить использование TCompactProtocol в JavaScript, поэтому это стало ненужным. Я сделал прогресс за этим, я обнаружил, что вам нужно скомпилировать расширения Thrift в режиме COB, а затем вы получите асинхронные заглушки, но мне не удалось определить, как создать правильные объекты C++ для использования этих заглушек. C++ - не самый сильный язык. – AaronM

ответ

0

Вы можете использовать libuv для работы async. NodeJS также использует эту библиотеку для асинхронных операций

+0

Было бы здорово, если бы я делал стандартный сокет io, но тогда я также смог бы написать асинхронный код. Проблема в том, что вызов для добавления необходимо разбить, чтобы он не блокировался. Я не понимаю, как это может сделать libuv. Я вижу, как проект бережливости мог использовать его для реализации неблокирующих версий. – AaronM

0

Невозможно, или так кажется. Сейчас я работаю над тем же, но пока у меня нет работы.

Я нашел две полезные ссылки, которые могут быть некоторые используют для вас:

A C++ client implementation что некоторые классифицирован, которые помогают с отсутствующими битами этого Java implementation

Есть также некоторые довольно интересные идеи Boost.Asio на апача JIRA для THRIFT-1

похоже, всю информацию там, но я все еще немного запутался :)

НТН