1.5 处理器接口
优质
小牛编辑
129浏览
2023-12-01
处理器接口
在服务端,处理器接口用来把服务跟具体的服务器绑定在一起。在这里,服务是指独立于具体传输协议的 RPC 服务,它是由 Service
类型实现的。而具体的服务器是指 http
,tcp
,udp
,websocket
等服务器,这些服务器是由语言本身所提供的标准库、第三方类库或框架实现的。
在 C# 中,该接口定义如下:
public interface IHandler<T> {
Task Bind(T server);
}
在 TypeScript 中,该接口定义为:
interface Handler {
bind(server: any): void;
}
interface HandlerConstructor {
serverTypes: Function[];
new(service: Service): Handler;
}
在 Dart 中,该接口定义为:
abstract class Handler<T> {
void bind(T server);
}
abstract class HandlerCreator<T extends Handler> {
List<String> serverTypes;
T create(Service service);
}
该接口的实现应包含一个有参构造函数,参数为 Service
类型。即通过构造函数,将该处理器与服务绑定,然后通过 bind
方法,将该处理器与具体的服务器绑定。
与客户端类似,服务端也包含一个 register
静态方法,用来将注册处理器接口的实现。
例如在 C# 中,该方法定义为:
public static void Register<T, S>(string name) where T : IHandler<S>;
在 TypeScript 中,该方法定义为:
public static register(name: string, ctor: HandlerConstructor): void;
在 Dart 中,该方法定义为:
static void register<T extends Handler>(String name, HandlerCreator<T> creator);
虽然在不同语言中,形式和参数上有些差异,但是实现的功能是一样的。
一般来说,语言标准库中提供的服务器在默认实现中都已经自动注册了。扩展库,第三方类库或框架中提供的服务器所对应的处理器则需要用户自己注册。如果某个第三方类库或框架所提供的服务器没有默认对应的处理器实现,用户也可以自行实现和注册。
另外,在 Handler
接口被实现时,除了接口中声明的 bind
方法外,一般还会实现一个 handler
方法,但是该方法的具体参数类型和个数会因为服务器不同而不同。因此该接口中并没有声明该方法。
handler
方法是用来处理实际连接和请求的。对于某些服务器或服务器框架来说,该方法可以直接作为回调函数被传入。因此,它是非常特别又非常重要的。