or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

connections.mdindex.mdprotocols.mdservers.mdtransports.md

protocols.mddocs/

0

# Protocol Support

1

2

Multiple serialization protocols for efficient data transmission with full JavaScript type support, configurable options for performance optimization, and seamless integration with all transport mechanisms.

3

4

## Capabilities

5

6

### Binary Protocol

7

8

High-performance binary serialization protocol optimized for efficiency and minimal overhead. The default choice for production deployments requiring maximum throughput.

9

10

```javascript { .api }

11

/**

12

* Binary protocol implementation for efficient serialization

13

* @param transport - Transport instance to write/read data

14

* @param strictRead - Enable strict reading mode for better error detection

15

* @param strictWrite - Enable strict writing mode for better error detection

16

*/

17

class TBinaryProtocol {

18

constructor(transport, strictRead?, strictWrite?);

19

20

// Message framing

21

writeMessageBegin(name, type, seqid): void;

22

writeMessageEnd(): void;

23

readMessageBegin(): {fname: string, mtype: number, rseqid: number};

24

readMessageEnd(): void;

25

26

// Struct framing

27

writeStructBegin(name): void;

28

writeStructEnd(): void;

29

readStructBegin(): {fname: string};

30

readStructEnd(): void;

31

32

// Field framing

33

writeFieldBegin(name, type, id): void;

34

writeFieldEnd(): void;

35

writeFieldStop(): void;

36

readFieldBegin(): {fname: string, ftype: number, fid: number};

37

readFieldEnd(): void;

38

39

// Collection framing

40

writeMapBegin(ktype, vtype, size): void;

41

writeMapEnd(): void;

42

readMapBegin(): {ktype: number, vtype: number, size: number};

43

readMapEnd(): void;

44

45

writeListBegin(etype, size): void;

46

writeListEnd(): void;

47

readListBegin(): {etype: number, size: number};

48

readListEnd(): void;

49

50

writeSetBegin(etype, size): void;

51

writeSetEnd(): void;

52

readSetBegin(): {etype: number, size: number};

53

readSetEnd(): void;

54

55

// Primitive type serialization

56

writeBool(bool): void;

57

writeByte(byte): void;

58

writeI16(i16): void;

59

writeI32(i32): void;

60

writeI64(i64): void;

61

writeDouble(dub): void;

62

writeString(str): void;

63

writeBinary(buf): void;

64

65

// Primitive type deserialization

66

readBool(): boolean;

67

readByte(): number;

68

readI16(): number;

69

readI32(): number;

70

readI64(): number;

71

readDouble(): number;

72

readString(): string;

73

readBinary(): Buffer;

74

75

// Utility methods

76

skip(type): void;

77

flush(): void;

78

79

// Configuration properties

80

strictRead: boolean;

81

strictWrite: boolean;

82

}

83

```

84

85

**Usage Examples:**

86

87

```javascript

88

const thrift = require('thrift');

89

90

// Basic binary protocol

91

const transport = new thrift.TBufferedTransport();

92

const protocol = new thrift.TBinaryProtocol(transport);

93

94

// Strict mode for better error detection

95

const strictProtocol = new thrift.TBinaryProtocol(transport, true, true);

96

97

// Writing data

98

protocol.writeMessageBegin('myMethod', thrift.Thrift.MessageType.CALL, 1);

99

protocol.writeStructBegin('MyStruct');

100

protocol.writeFieldBegin('field1', thrift.Thrift.Type.STRING, 1);

101

protocol.writeString('Hello, World!');

102

protocol.writeFieldEnd();

103

protocol.writeFieldStop();

104

protocol.writeStructEnd();

105

protocol.writeMessageEnd();

106

protocol.flush();

107

```

108

109

### Compact Protocol

110

111

Space-efficient binary protocol that uses variable-length encoding for integers and compact field representations. Ideal for bandwidth-constrained environments and mobile applications.

112

113

```javascript { .api }

114

/**

115

* Compact binary protocol with variable-length encoding

116

* @param transport - Transport instance to write/read data

117

*/

118

class TCompactProtocol {

119

constructor(transport);

120

121

// Same interface as TBinaryProtocol with optimized encoding

122

writeMessageBegin(name, type, seqid): void;

123

writeMessageEnd(): void;

124

readMessageBegin(): {fname: string, mtype: number, rseqid: number};

125

readMessageEnd(): void;

126

127

writeStructBegin(name): void;

128

writeStructEnd(): void;

129

readStructBegin(): {fname: string};

130

readStructEnd(): void;

131

132

writeFieldBegin(name, type, id): void;

133

writeFieldEnd(): void;

134

writeFieldStop(): void;

135

readFieldBegin(): {fname: string, ftype: number, fid: number};

136

readFieldEnd(): void;

137

138

writeMapBegin(ktype, vtype, size): void;

139

writeMapEnd(): void;

140

readMapBegin(): {ktype: number, vtype: number, size: number};

141

readMapEnd(): void;

142

143

writeListBegin(etype, size): void;

144

writeListEnd(): void;

145

readListBegin(): {etype: number, size: number};

146

readListEnd(): void;

147

148

writeSetBegin(etype, size): void;

149

writeSetEnd(): void;

150

readSetBegin(): {etype: number, size: number};

151

readSetEnd(): void;

152

153

writeBool(bool): void;

154

writeByte(byte): void;

155

writeI16(i16): void;

156

writeI32(i32): void;

157

writeI64(i64): void;

158

writeDouble(dub): void;

159

writeString(str): void;

160

writeBinary(buf): void;

161

162

readBool(): boolean;

163

readByte(): number;

164

readI16(): number;

165

readI32(): number;

166

readI64(): number;

167

readDouble(): number;

168

readString(): string;

169

readBinary(): Buffer;

170

171

skip(type): void;

172

flush(): void;

173

}

174

```

175

176

**Usage Examples:**

177

178

```javascript

179

// Compact protocol for bandwidth efficiency

180

const compactProtocol = new thrift.TCompactProtocol(transport);

181

182

// Same usage as binary protocol but with smaller payload sizes

183

compactProtocol.writeI32(42); // Uses variable-length encoding

184

compactProtocol.writeString("test"); // Compact string representation

185

```

186

187

### JSON Protocol

188

189

Human-readable JSON serialization protocol for debugging, REST API integration, and cross-platform compatibility. Supports both readable and compact JSON formats.

190

191

```javascript { .api }

192

/**

193

* JSON protocol implementation for human-readable serialization

194

* @param transport - Transport instance to write/read data

195

*/

196

class TJSONProtocol {

197

constructor(transport);

198

199

// Same interface as other protocols with JSON serialization

200

writeMessageBegin(name, type, seqid): void;

201

writeMessageEnd(): void;

202

readMessageBegin(): {fname: string, mtype: number, rseqid: number};

203

readMessageEnd(): void;

204

205

writeStructBegin(name): void;

206

writeStructEnd(): void;

207

readStructBegin(): {fname: string};

208

readStructEnd(): void;

209

210

writeFieldBegin(name, type, id): void;

211

writeFieldEnd(): void;

212

writeFieldStop(): void;

213

readFieldBegin(): {fname: string, ftype: number, fid: number};

214

readFieldEnd(): void;

215

216

writeMapBegin(ktype, vtype, size): void;

217

writeMapEnd(): void;

218

readMapBegin(): {ktype: number, vtype: number, size: number};

219

readMapEnd(): void;

220

221

writeListBegin(etype, size): void;

222

writeListEnd(): void;

223

readListBegin(): {etype: number, size: number};

224

readListEnd(): void;

225

226

writeSetBegin(etype, size): void;

227

writeSetEnd(): void;

228

readSetBegin(): {etype: number, size: number};

229

readSetEnd(): void;

230

231

writeBool(bool): void;

232

writeByte(byte): void;

233

writeI16(i16): void;

234

writeI32(i32): void;

235

writeI64(i64): void;

236

writeDouble(dub): void;

237

writeString(str): void;

238

writeBinary(buf): void;

239

240

readBool(): boolean;

241

readByte(): number;

242

readI16(): number;

243

readI32(): number;

244

readI64(): number;

245

readDouble(): number;

246

readString(): string;

247

readBinary(): Buffer;

248

249

skip(type): void;

250

flush(): void;

251

}

252

```

253

254

**Usage Examples:**

255

256

```javascript

257

// JSON protocol for debugging and REST integration

258

const jsonProtocol = new thrift.TJSONProtocol(transport);

259

260

// Creates human-readable JSON output

261

jsonProtocol.writeString("Hello"); // "Hello"

262

jsonProtocol.writeI32(42); // 42

263

jsonProtocol.writeListBegin(thrift.Thrift.Type.STRING, 2); // [

264

jsonProtocol.writeString("item1"); // "item1",

265

jsonProtocol.writeString("item2"); // "item2"

266

jsonProtocol.writeListEnd(); // ]

267

```

268

269

### Header Protocol

270

271

Advanced protocol with header-based metadata support, versioning capabilities, and extensible header information for enterprise deployments.

272

273

```javascript { .api }

274

/**

275

* Header protocol with metadata and versioning support

276

* @param transport - Transport instance to write/read data

277

* @param clientType - Client type identifier for header metadata

278

*/

279

class THeaderProtocol {

280

constructor(transport, clientType?);

281

282

// Extended interface with header support

283

writeMessageBegin(name, type, seqid): void;

284

writeMessageEnd(): void;

285

readMessageBegin(): {fname: string, mtype: number, rseqid: number};

286

readMessageEnd(): void;

287

288

// Header-specific methods

289

setHeader(key, value): void;

290

getHeader(key): string;

291

clearHeaders(): void;

292

getHeaders(): object;

293

294

// Transform support

295

addTransform(transform): void;

296

getTransforms(): number[];

297

298

// Standard protocol interface

299

writeStructBegin(name): void;

300

writeStructEnd(): void;

301

readStructBegin(): {fname: string};

302

readStructEnd(): void;

303

304

writeFieldBegin(name, type, id): void;

305

writeFieldEnd(): void;

306

writeFieldStop(): void;

307

readFieldBegin(): {fname: string, ftype: number, fid: number};

308

readFieldEnd(): void;

309

310

writeMapBegin(ktype, vtype, size): void;

311

writeMapEnd(): void;

312

readMapBegin(): {ktype: number, vtype: number, size: number};

313

readMapEnd(): void;

314

315

writeListBegin(etype, size): void;

316

writeListEnd(): void;

317

readListBegin(): {etype: number, size: number};

318

readListEnd(): void;

319

320

writeSetBegin(etype, size): void;

321

writeSetEnd(): void;

322

readSetBegin(): {etype: number, size: number};

323

readSetEnd(): void;

324

325

writeBool(bool): void;

326

writeByte(byte): void;

327

writeI16(i16): void;

328

writeI32(i32): void;

329

writeI64(i64): void;

330

writeDouble(dub): void;

331

writeString(str): void;

332

writeBinary(buf): void;

333

334

readBool(): boolean;

335

readByte(): number;

336

readI16(): number;

337

readI32(): number;

338

readI64(): number;

339

readDouble(): number;

340

readString(): string;

341

readBinary(): Buffer;

342

343

skip(type): void;

344

flush(): void;

345

346

// Configuration properties

347

clientType: number;

348

}

349

```

350

351

**Usage Examples:**

352

353

```javascript

354

// Header protocol with metadata

355

const headerProtocol = new thrift.THeaderProtocol(transport, 1);

356

357

// Set custom headers

358

headerProtocol.setHeader('X-Request-ID', 'req-123');

359

headerProtocol.setHeader('X-Client-Version', '2.1.0');

360

headerProtocol.setHeader('Authorization', 'Bearer token123');

361

362

// Add compression transform

363

headerProtocol.addTransform(thrift.THeaderTransform.ZLIB);

364

365

// Use like any other protocol

366

headerProtocol.writeString("data with headers");

367

368

// Read headers from responses

369

const headers = headerProtocol.getHeaders();

370

console.log('Response headers:', headers);

371

```

372

373

## Protocol Selection Guidelines

374

375

```javascript { .api }

376

// Protocol performance and use case comparison

377

interface ProtocolComparison {

378

TBinaryProtocol: {

379

performance: 'Highest',

380

size: 'Efficient',

381

humanReadable: false,

382

useCase: 'Production systems, high-throughput applications'

383

};

384

385

TCompactProtocol: {

386

performance: 'High',

387

size: 'Most efficient',

388

humanReadable: false,

389

useCase: 'Mobile apps, bandwidth-constrained environments'

390

};

391

392

TJSONProtocol: {

393

performance: 'Lower',

394

size: 'Largest',

395

humanReadable: true,

396

useCase: 'Debugging, REST integration, cross-platform compatibility'

397

};

398

399

THeaderProtocol: {

400

performance: 'High',

401

size: 'Efficient + headers',

402

humanReadable: false,

403

useCase: 'Enterprise systems requiring metadata and versioning'

404

};

405

}

406

```