网络编程接口

网络编程接口或 NPI,它定义了可相互附加的网络模块之间的接口。 注册为特定 NPI 的客户端的客户端模块只能附加到注册为同一 NPI 的提供程序的提供程序模块。 同样,注册为特定 NPI 提供程序的提供程序模块只能附加到注册为同一 NPI 客户端的客户端模块。

每个 NPI 定义以下项:

  • 唯一标识 NPI 的 NPI 标识符。 网络模块指定 NPI 标识符,以指示当网络模块向网络模块注册器(NMR)注册自身时它支持的特定 NPI。 网络模块可通过多次向 NMR 注册其自身来支持多个 NPI,且每次注册对应一个它所支持的 NPI。 仅当两个客户端模块都支持同一 NPI 时,NMR 才会启动将客户端模块附加到提供程序模块。

  • 可选的 客户端特征 结构,用于指定每个客户端模块的 NPI 特定特征。 此类 NPI 特定的特征可能包括客户端模块支持的 NPI 版本(或版本),或者客户端模块所需的地址系列或协议等项。 提供程序模块可以使用客户端模块的客户端特征结构中包含的信息来确定它是否会附加到客户端模块。 如果 NPI 未定义任何特定于 NPI 的客户端特征,则不需要此结构。

  • 可选的 提供者特征 结构,用于指定各提供者模块特有的 NPI 特征。 此类 NPI 特定特征可能包括提供程序模块支持的 NPI 版本(或版本)等项,或者提供程序模块支持的地址系列或协议。 客户端模块可以使用提供程序模块的客户端特征结构中包含的信息来确定它是否会附加到提供程序模块。 如果 NPI 未定义任何特定于 NPI 的提供程序特征,则不需要此结构。

  • 零个或多个客户端模块回调函数。 提供程序模块成功附加到客户端模块后,提供程序模块可以通过调用客户端模块的回调函数来访问客户端模块的功能。

  • 一个或多个提供程序模块函数。 客户端模块成功附加到提供程序模块后,客户端模块可以通过调用提供程序模块的函数来访问提供程序模块的功能。

  • 客户端调度表 结构,其中包含指向每个客户端模块回调函数的函数指针。 如果 NPI 未定义任何客户端模块回调函数,则不需要此结构。

  • 提供程序转移表结构,其中包含指向每个提供程序模块函数的函数指针。

支持特定 NPI 的客户端模块使用 NPI 定义的项来实现接口的客户端部分。 同样,支持特定 NPI 的提供程序模块使用 NPI 定义的项来实现接口的提供程序端。

NPI 定义的所有项都与 NMR 不透明,但 NPI 标识符除外。 NMR 使用 NPI 标识符来确定应将哪些客户端模块附加到哪个提供程序模块。