Создание HttpClient в node.js в Thrift

Я использую экономию для кроссплатформенной интеграции. У меня есть сервер Python в бережливости.

Python Server

#!/usr/bin/env python

port = 30303
host = '127.0.0.1'
import sys
sys.path.append('gen-py')

from helloworld import HelloWorld
from helloworld.ttypes import *

from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.transport import THttpClient
from thrift.protocol import TBinaryProtocol
from thrift.protocol import TJSONProtocol
from thrift.server import TServer
from thrift.server import THttpServer

import socket

class HelloWorldHandler:
  def __init__(self):
    self.log = {}

  def sayHello(self):
    print "sayHello()"
    return "say hello from " + socket.gethostbyname(socket.gethostname())    

handler = HelloWorldHandler()
processor = HelloWorld.Processor(handler)
transport = TSocket.TServerSocket(host=host, port=port)
tfactory = TTransport.TBufferedTransportFactory()
pfactory = TBinaryProtocol.TBinaryProtocolFactory()
#pfactory = TJSONProtocol.TJSONProtocolFactory()

#server = THttpServer.THttpServer(processor, (host, port), pfactory)
server = TServer.TSimpleServer(processor, transport, tfactory, pfactory)

print "Starting python server..."
server.serve()
print "done!"

Я создал клиент узла в Thrift, который может получить доступ к серверу Python при создании TSimpleServer в Python, но не может подключиться при создании THttpServer

Узловой клиент

var thrift = require('thrift');
var ThriftTransports = require('./node_modules/thrift/lib/thrift/transport.js');
var ThriftProtocols = require('./node_modules/thrift/lib/thrift/protocol.js');

var Calculator = require('./gen-nodejs/HelloWorld.js');    
    ttypes = require('./gen-nodejs/helloworld_types.js');    

transport = ThriftTransports.TBufferedTransport()
//protocol = ThriftProtocols.TJSONProtocol()
protocol = ThriftProtocols.TBinaryProtocol()

var connection = thrift.createConnection('127.0.0.1', 30303, {
  transport : transport,
  protocol : protocol
});

connection.on('error', function(err) {
  console.log("error in connection");
  console.error(err);
});

connection.on('connect', function(){    
    var client = thrift.createClient(Calculator,connection);

client.sayHello(function(err, response) {
  console.log(response);
  connection.end();
});
})

Я убедился, что использовал протокол JSON при запуске THttpServer в python. Я не знаю, как создать HttpClient для узла в Thrift.

Извините за сброс кода, но я подумал, что это прояснит вопрос. Спасибо

1 ответ

Поддержка клиента http узла была добавлена ​​23 апреля 2014 года. Поддержка библиотеки в данный момент доступна только в ветке dev, но в ближайшем будущем она будет выпущена с 0.9.2. Вот пример клиента для службы heloSvc, использующей соединение / клиент узла http:

var thrift = require('thrift');
var helloSvc = require('./gen-nodejs/helloSvc.js');

var options = {
   transport: thrift.TBufferedTransport,
   protocol: thrift.TJSONProtocol,
   path: "/hello",
   headers: {"Connection": "close"}
};

var connection = thrift.createHttpConnection("localhost", 9090, options);
var client = thrift.createHttpClient(helloSvc, connection);

client.getMessage("Thurston Howell", function(error, result) {
  console.log("Msg from server: " + result);
});
Другие вопросы по тегам