目录
当前位置: 首页 > 文档资料 > Hprose 中文文档 >

1.11 编解码器

优质
小牛编辑
132浏览
2023-12-01

编解码器

服务端和客户端拥有各自的编解码器接口定义。虽然在形式上,不同的语言有所不同,但参数都是一样的。

例如在 C# 中,接口定义为:

public interface IServiceCodec {
    MemoryStream Encode(object result, ServiceContext context);
    (string, object[]) Decode(MemoryStream request, ServiceContext context);
}

public interface IClientCodec {
    MemoryStream Encode(string name, object[] args, ClientContext context);
    object Decode(MemoryStream response, ClientContext context);
}

在 TypeScript,接口定义为:

interface ServiceCodec {
    encode(result: any, context: ServiceContext): Uint8Array;
    decode(request: Uint8Array, context: ServiceContext): [string, any[]];
}

interface ClientCodec {
    encode(name: string, args: any[], context: ClientContext): Uint8Array;
    decode(response: Uint8Array, context: ClientContext): any;
}

在 Dart 中,接口定义为:

class RequestInfo {
  final String name;
  final List args;
  RequestInfo(this.name, this.args);
}

abstract class ServiceCodec {
  Uint8List encode(result, ServiceContext context);
  RequestInfo decode(Uint8List request, ServiceContext context);
}

abstract class ClientCodec {
  Uint8List encode(String name, List args, ClientContext context);
  dynamic decode(Uint8List response, ClientContext context);
}

Hprose 3.0 中内置的默认编解码器是使用 hprose 序列化和 hprose RPC 编码协议实现的。另外,还提供了 JSONRPC 2.0 编解码器。它们都是上面这两个接口的具体实现。用户可以通过自定义编解码器来支持更多的 RPC 协议。

客户端和服务端各有一个 codec 属性,该属性的默认值为 hprose 编解码器。通过给该属性赋值为其它编解码器的实例对象,可以将客户端或服务端变为其它类型的 RPC 客户端或服务端。