| T Jake Luciani | 322caa2 | 2010-02-15 03:24:55 +0000 | [diff] [blame] | 1 | Thrift Javascript Library |
| Henrique Mendonça | 095ddb7 | 2013-09-20 19:38:03 +0200 | [diff] [blame] | 2 | ========================= |
| 3 | This browser based Apache Thrift implementation supports |
| henrique | 2a7dccc | 2014-03-07 22:16:51 +0100 | [diff] [blame] | 4 | RPC clients using the JSON protocol over Http[s] with XHR |
| 5 | and WebSocket. |
| T Jake Luciani | 322caa2 | 2010-02-15 03:24:55 +0000 | [diff] [blame] | 6 | |
| 7 | License |
| Henrique Mendonça | 095ddb7 | 2013-09-20 19:38:03 +0200 | [diff] [blame] | 8 | ------- |
| T Jake Luciani | 322caa2 | 2010-02-15 03:24:55 +0000 | [diff] [blame] | 9 | Licensed to the Apache Software Foundation (ASF) under one |
| 10 | or more contributor license agreements. See the NOTICE file |
| 11 | distributed with this work for additional information |
| 12 | regarding copyright ownership. The ASF licenses this file |
| 13 | to you under the Apache License, Version 2.0 (the |
| 14 | "License"); you may not use this file except in compliance |
| 15 | with the License. You may obtain a copy of the License at |
| 16 | |
| 17 | http://www.apache.org/licenses/LICENSE-2.0 |
| 18 | |
| 19 | Unless required by applicable law or agreed to in writing, |
| 20 | software distributed under the License is distributed on an |
| 21 | "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| 22 | KIND, either express or implied. See the License for the |
| 23 | specific language governing permissions and limitations |
| 24 | under the License. |
| 25 | |
| henrique | 2a7dccc | 2014-03-07 22:16:51 +0100 | [diff] [blame] | 26 | Grunt Build |
| 27 | ------------ |
| Roger Meier | 52744ee | 2014-03-12 09:38:42 +0100 | [diff] [blame] | 28 | This is the base directory for the Apache Thrift JavaScript |
| henrique | 2a7dccc | 2014-03-07 22:16:51 +0100 | [diff] [blame] | 29 | library. This directory contains a Gruntfile.js and a |
| 30 | package.json. Many of the build and test tools used here |
| 31 | require a recent version of Node.js to be installed. To |
| 32 | install the support files for the Grunt build tool execute |
| 33 | the command: |
| henrique | d0265c7 | 2014-05-19 19:11:10 +0200 | [diff] [blame] | 34 | |
| 35 | npm install |
| 36 | |
| henrique | 2a7dccc | 2014-03-07 22:16:51 +0100 | [diff] [blame] | 37 | This reads the package.json and pulls in the appropriate |
| 38 | sources from the internet. To build the JavaScript branch |
| 39 | of Apache Thrift execute the command: |
| henrique | d0265c7 | 2014-05-19 19:11:10 +0200 | [diff] [blame] | 40 | |
| Brian Forbis | b5d6ea3 | 2018-08-25 23:39:29 -0400 | [diff] [blame] | 41 | npx grunt |
| henrique | d0265c7 | 2014-05-19 19:11:10 +0200 | [diff] [blame] | 42 | |
| Brian Forbis | b5d6ea3 | 2018-08-25 23:39:29 -0400 | [diff] [blame] | 43 | This runs the grunt build tool (from within `./node_modules/.bin/`), |
| 44 | linting all of the source files, setting up and running the |
| 45 | tests, concatenating and minifying the main libraries and |
| 46 | generating the html documentation. |
| Randy Abernethy | b265230 | 2014-11-15 12:02:57 -0800 | [diff] [blame] | 47 | |
| henrique | 2a7dccc | 2014-03-07 22:16:51 +0100 | [diff] [blame] | 48 | Tree |
| 49 | ---- |
| 50 | The following directories are present (some only after the |
| 51 | grunt build): |
| 52 | /src - The JavaScript Apache Thrift source |
| Roger Meier | 52744ee | 2014-03-12 09:38:42 +0100 | [diff] [blame] | 53 | /doc - HTML documentation |
| henrique | 2a7dccc | 2014-03-07 22:16:51 +0100 | [diff] [blame] | 54 | /dist - Distribution files (thrift.js and thrift.min.js) |
| 55 | /test - Various tests, this is a good place to look for |
| 56 | example code |
| 57 | /node_modules - Build support files installed by npm |
| 58 | |
| 59 | |
| 60 | Example JavaScript Client and Server |
| 61 | ------------------------------------ |
| Henrique Mendonça | 095ddb7 | 2013-09-20 19:38:03 +0200 | [diff] [blame] | 62 | The listing below demonstrates a simple browser based JavaScript |
| henrique | a2de410 | 2014-02-07 14:12:56 +0100 | [diff] [blame] | 63 | Thrift client and Node.js JavaScript server for the hello_svc |
| 64 | service. |
| T Jake Luciani | 322caa2 | 2010-02-15 03:24:55 +0000 | [diff] [blame] | 65 | |
| henrique | 2a7dccc | 2014-03-07 22:16:51 +0100 | [diff] [blame] | 66 | ### hello.thrift - Service IDL |
| 67 | ### build with: $ thrift -gen js -gen js:node hello.thrift |
| henrique | a2de410 | 2014-02-07 14:12:56 +0100 | [diff] [blame] | 68 | service hello_svc { |
| 69 | string get_message(1: string name) |
| Henrique Mendonça | 095ddb7 | 2013-09-20 19:38:03 +0200 | [diff] [blame] | 70 | } |
| T Jake Luciani | 322caa2 | 2010-02-15 03:24:55 +0000 | [diff] [blame] | 71 | |
| Henrique Mendonça | 095ddb7 | 2013-09-20 19:38:03 +0200 | [diff] [blame] | 72 | ### hello.html - Browser Client |
| henrique | a2de410 | 2014-02-07 14:12:56 +0100 | [diff] [blame] | 73 | <!DOCTYPE html> |
| Henrique Mendonça | 095ddb7 | 2013-09-20 19:38:03 +0200 | [diff] [blame] | 74 | <html lang="en"> |
| henrique | a2de410 | 2014-02-07 14:12:56 +0100 | [diff] [blame] | 75 | <head> |
| 76 | <meta charset="utf-8"> |
| 77 | <title>Hello Thrift</title> |
| 78 | </head> |
| 79 | <body> |
| 80 | Name: <input type="text" id="name_in"> |
| 81 | <input type="button" id="get_msg" value="Get Message" > |
| 82 | <div id="output"></div> |
| 83 | |
| 84 | <script src="thrift.js"></script> |
| 85 | <script src="gen-js/hello_svc.js"></script> |
| 86 | <script> |
| 87 | (function() { |
| Roger Meier | 52744ee | 2014-03-12 09:38:42 +0100 | [diff] [blame] | 88 | var transport = new Thrift.TXHRTransport("/hello"); |
| 89 | var protocol = new Thrift.TJSONProtocol(transport); |
| henrique | a2de410 | 2014-02-07 14:12:56 +0100 | [diff] [blame] | 90 | var client = new hello_svcClient(protocol); |
| 91 | var nameElement = document.getElementById("name_in"); |
| 92 | var outputElement = document.getElementById("output"); |
| 93 | document.getElementById("get_msg") |
| 94 | .addEventListener("click", function(){ |
| 95 | client.get_message(nameElement.value, function(result) { |
| 96 | outputElement.innerHTML = result; |
| 97 | }); |
| 98 | }); |
| 99 | })(); |
| Henrique Mendonça | 095ddb7 | 2013-09-20 19:38:03 +0200 | [diff] [blame] | 100 | </script> |
| henrique | a2de410 | 2014-02-07 14:12:56 +0100 | [diff] [blame] | 101 | </body> |
| Henrique Mendonça | 095ddb7 | 2013-09-20 19:38:03 +0200 | [diff] [blame] | 102 | </html> |
| T Jake Luciani | 322caa2 | 2010-02-15 03:24:55 +0000 | [diff] [blame] | 103 | |
| Henrique Mendonça | 095ddb7 | 2013-09-20 19:38:03 +0200 | [diff] [blame] | 104 | ### hello.js - Node Server |
| Roger Meier | 52744ee | 2014-03-12 09:38:42 +0100 | [diff] [blame] | 105 | var thrift = require('thrift'); |
| henrique | a2de410 | 2014-02-07 14:12:56 +0100 | [diff] [blame] | 106 | var hello_svc = require('./gen-nodejs/hello_svc.js'); |
| Henrique Mendonça | 095ddb7 | 2013-09-20 19:38:03 +0200 | [diff] [blame] | 107 | |
| henrique | a2de410 | 2014-02-07 14:12:56 +0100 | [diff] [blame] | 108 | var hello_handler = { |
| 109 | get_message: function(name, result) { |
| 110 | var msg = "Hello " + name + "!"; |
| 111 | result(null, msg); |
| Henrique Mendonça | 095ddb7 | 2013-09-20 19:38:03 +0200 | [diff] [blame] | 112 | } |
| henrique | a2de410 | 2014-02-07 14:12:56 +0100 | [diff] [blame] | 113 | } |
| Henrique Mendonça | 095ddb7 | 2013-09-20 19:38:03 +0200 | [diff] [blame] | 114 | |
| henrique | a2de410 | 2014-02-07 14:12:56 +0100 | [diff] [blame] | 115 | var hello_svc_opt = { |
| Roger Meier | 52744ee | 2014-03-12 09:38:42 +0100 | [diff] [blame] | 116 | transport: thrift.TBufferedTransport, |
| 117 | protocol: thrift.TJSONProtocol, |
| 118 | processor: hello_svc, |
| henrique | a2de410 | 2014-02-07 14:12:56 +0100 | [diff] [blame] | 119 | handler: hello_handler |
| 120 | }; |
| 121 | |
| 122 | var server_opt = { |
| 123 | staticFilePath: ".", |
| 124 | services: { |
| 125 | "/hello": hello_svc_opt |
| 126 | } |
| 127 | } |
| 128 | |
| Roger Meier | 52744ee | 2014-03-12 09:38:42 +0100 | [diff] [blame] | 129 | var server = Thrift.createWebServer(server_opt); |
| henrique | a2de410 | 2014-02-07 14:12:56 +0100 | [diff] [blame] | 130 | var port = 9099; |
| 131 | server.listen(port); |
| henrique | 2a7dccc | 2014-03-07 22:16:51 +0100 | [diff] [blame] | 132 | console.log("Http/Thrift Server running on port: " + port); |
| 133 | |
| henrique | d0265c7 | 2014-05-19 19:11:10 +0200 | [diff] [blame] | 134 | |
| 135 | TypeScript |
| 136 | ------------------------------------ |
| 137 | TypeScript definition files can also be generated by running: |
| 138 | |
| 139 | thrift --gen js:ts file.thrift |
| 140 | |
| Mustafa Senol Cosar | f86845e | 2018-12-05 17:50:18 +0300 | [diff] [blame] | 141 | # Breaking Changes |
| 142 | |
| 143 | ## 0.13.0 |
| 144 | |
| 145 | 1. 64-bit integer constants are now generatd using node-int64 e.g.: var x = new Int64("7fffffffffffffff"); |