在Thrift中的node.js中创建HttpClient

时间:2014-04-11 10:51:47

标签: python node.js thrift thrift-protocol

我正在使用thrift进行跨平台集成。我有一个节俭的python服务器。

Python服务器

#!/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();
});
})

我确保在python中运行THttpServer时使用了JSON协议。 我不知道如何在thrift中为节点创建HttpClient。

很抱歉转储代码,但我认为这会让问题更加清晰。感谢

1 个答案:

答案 0 :(得分:3)

节点http客户端支持已于2014年4月23日添加。库支持目前仅在dev分支中,但在不久的将来某个时候将以0.9.2发布。这是使用http节点连接/客户端的名为heloSvc的服务的示例客户端:

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);
});