The Demigeek
The Demigeek

Reputation: 773

Thrift transport in javascript client

I'm trying to build a javascript client for my Thrift server. The server is up and running and I can get calls to the server working with a PHP client. I just can't figure out the javascript client.

In particular, instantiating the transport baffles me. The tutorial at http://thrift.apache.org/tutorial/js/ shows:

function calc() {
    var transport = new Thrift.Transport("/thrift/service/tutorial/");
    var protocol  = new Thrift.Protocol(transport);
    var client    = new CalculatorClient(protocol);

When I do this, I get an http 404 on "/var/www/thrift/service/tutorial/"

I've found one or two other examples that use

var transport = new Thrift.Transport("/service");

But that gives me a 404 as well.

I've never seen an explanation of what I'm supposed to pass to the constructor of Transport in javascript. In my PHP code, I create a socket and then pass that to the constructor of the Transport. However, javascript complains that Thrift.Socket() isn't a constructor.

The tutorial at http://thrift.apache.org/tutorial/js/ isn't terribly helpful. It says:

The first thing for using the Thrift files is setting up your Transport protocol. At this time, it only supports AJAX and is as follows:

var transport = new Thrift.Transport("/thrift/service/tutorial/");

There's no description of what that path passed to the constructor should be.

I'm lost on this. What do I pass to the Transport constructor in javascript?

Upvotes: 10

Views: 7843

Answers (4)

Jack Miller
Jack Miller

Reputation: 7657

To use a Javascript client you need a HTTP Thrift server (e.g. the one pointed out by yiding). You also need to use TJSONProtocol.

The files how to make a Thrift Java server work with an Thrift Javascript client are scattered throughout the source. I puzzled them together here: https://github.com/LukeOwncloud/ThriftJavaJavascriptDemo

Upvotes: 2

Abhinav
Abhinav

Reputation: 1740

The above answers have already given enough clarity.

However to make things a bit more clear, assuming that your server is localhost and its running on port 8080.

Let your project name be Tutorial_service and endpoint in your server project be teach_thrift then you have to pass URL as below

var transport = new Thrift.Transport("http://localhost:8080/Tutorial_service/teach_thrift");

It should keep you going.. :)

Upvotes: 0

Ryan J
Ryan J

Reputation: 2552

I think the answer yiding gave you has identified the problem. I don't have a complete answer, but can give you a few links that may help you get things figured out. If you're writing your server in PHP, this question may help. If you're writing your server in Java, this blog post which links to this sample code may help.

Upvotes: 1

yiding
yiding

Reputation: 3592

The argument is a URL to a website endpoint that acts as a thrift server using the HTTP processor and JSON protocol. The source code contains a java test server example which can work with such a client.

For your own server, it should be able to act as a webserver, and handle things like CORS for cross-domain requests from your js client.

Upvotes: 1

Related Questions