Object 内置对象

对象 DgramSocket

dgram.Socket 对象是一个封装了数据包函数功能的 EventEmitter

DgramSocket 实例是由 dgram.createSocket() 创建的。创建 dgram.Socket 实例不需要使用 new 关键字。

创建方法:

1 2
var dgram = require('dgram'); var sock = dgram.createSocket('udp4');

事件

DgramSocket 继承于 EventEmitter,对象的状态变化,以及数据接受,都是以事件的方式实现。

close 事件

close 事件将在使用 close() 关闭一个 socket 之后触发。该事件一旦触发,这个 socket 上将不会触发新的 message 事件。

error 事件

当有任何错误发生时,error 事件将被触发。

listening 事件

当一个 socket 开始监听数据包信息时,listening 事件将被触发。该事件会在创建 UDP socket 之后被立即触发。

message 事件

当有新的数据包被 socket 接收时,message 事件会被触发。msgrinfo 会作为参数传递到该事件的处理函数中。

  • msg: Buffer,消息
  • rinfo: Object,远程地址信息
    • address: string,发送方地址
    • family: string,地址类型 ('IPv4' or 'IPv6')
    • port: number,发送者端口
    • size: number,消息大小

继承关系

静态属性

defaultMaxListeners

Integer, 默认全局最大监听器数

1
static Integer DgramSocket.defaultMaxListeners;

成员函数

bind

该方法会令 dgram.Socket 在指定的 portaddr 上监听数据包信息。绑定完成时会触发一个 listening 事件。

1 2
DgramSocket.bind(Integer port = 0, String addr = "") async;

调用参数:

  • port: Integer, 指定绑定端口,若 port 未指定或为 0,操作系统会尝试绑定一个随机的端口
  • addr: String, 指定绑定地址,若 address 未指定,操作系统会尝试在所有地址上监听。

该方法会令 dgram.Socketopts 指定的 portaddress 上监听数据包信息。绑定完成时会触发一个 listening 事件。

1
DgramSocket.bind(Object opts) async;

调用参数:

  • opts: Object, 指定绑定参数

send

在 socket 上发送一个数据包

1 2 3
Integer DgramSocket.send(Buffer msg, Integer port, String address = "") async;

调用参数:

  • msg: Buffer, 指定发送的数据
  • port: Integer, 指定发送的目的端口
  • address: String, 指定发送的目的地址

返回结果:

  • Integer, 返回发送尺寸

在 socket 上发送一个数据包

1 2 3 4 5
Integer DgramSocket.send(Buffer msg, Integer offset, Integer length, Integer port, String address = "") async;

调用参数:

  • msg: Buffer, 指定发送的数据
  • offset: Integer, 从指定偏移开始发送
  • length: Integer, 之发送指定长度
  • port: Integer, 指定发送的目的端口
  • address: String, 指定发送的目的地址

返回结果:

  • Integer, 返回发送尺寸

address

返回一个包含 socket 地址信息的对象。对于 UDP socket,该对象将包含 address、family 和 port 属性。

1
NObject DgramSocket.address();

返回结果:

  • NObject, 返回对象绑定地址

close

关闭当前 socket

1
DgramSocket.close();

关闭当前 socket

1
DgramSocket.close(Function callback);

调用参数:

  • callback: Function, 关闭完成后的回调函数,它相当于为 close 事件添加了一个监听器

getRecvBufferSize

查询 socket 接收缓冲区大小

1
Integer DgramSocket.getRecvBufferSize();

返回结果:

  • Integer, 返回查询结果

getSendBufferSize

查询 socket 发送缓冲区大小

1
Integer DgramSocket.getSendBufferSize();

返回结果:

  • Integer, 返回查询结果

addMembership

使用 IP_ADD_MEMBERSHIP 套接字选项加入给定 multicastAddress 和 multicastInterface 处的多播组。如果未指定 multicastInterface 参数,操作系统将选择一个接口并向其添加成员资格。要向每个可用接口添加成员资格,请多次调用 addMembership ,每个接口调用一次。

1 2
DgramSocket.addMembership(String multicastAddress, String multicastInterface = "");

调用参数:

  • multicastAddress: String, 指定要加入的多播组地址
  • multicastInterface: String, 指定要加入的多播组接口

dropMembership

使用 IP_DROP_MEMBERSHIP 套接字选项在 multicastAddress 处留下多播组。当套接字关闭或进程终止时,内核会自动调用此方法,因此大多数应用程序永远没有理由调用此方法。

1 2
DgramSocket.dropMembership(String multicastAddress, String multicastInterface = "");

调用参数:

  • multicastAddress: String, 指定要删除的多播组地址
  • multicastInterface: String, 指定要删除的多播组接口

setMulticastTTL

设置 IP_MULTICAST_TTL 套接字选项

1
DgramSocket.setMulticastTTL(Integer ttl);

调用参数:

  • ttl: Integer, 指定要设置的 ttl,ttl 参数可以介于 0 和 255 之间。大多数系统上的默认值为 1。

setRecvBufferSize

设置 socket 接收缓冲区大小

1
DgramSocket.setRecvBufferSize(Integer size);

调用参数:

  • size: Integer, 指定要设置的尺寸

setSendBufferSize

设置 socket 发送缓冲区大小

1
DgramSocket.setSendBufferSize(Integer size);

调用参数:

  • size: Integer, 指定要设置的尺寸

setBroadcast

设置或清除 SO_BROADCAST socket 选项

1
DgramSocket.setBroadcast(Boolean flag);

调用参数:

  • flag: Boolean, 当设置为 true, UDP包会被发送到一个本地接口的广播地址

ref

维持 fibjs 进程不退出,在对象绑定期间阻止 fibjs 进程退出

1
DgramSocket DgramSocket.ref();

返回结果:

  • DgramSocket, 返回当前对象

unref

允许 fibjs 进程退出,在对象绑定期间允许 fibjs 进程退出

1
DgramSocket DgramSocket.unref();

返回结果:

  • DgramSocket, 返回当前对象

on

绑定一个事件处理函数到对象

1 2
Object DgramSocket.on(String ev, Function func);

调用参数:

  • ev: String, 指定事件的名称
  • func: Function, 指定事件处理函数

返回结果:

  • Object, 返回事件对象本身,便于链式调用

绑定一个事件处理函数到对象

1
Object DgramSocket.on(Object map);

调用参数:

  • map: Object, 指定事件映射关系,对象属性名称将作为事件名称,属性的值将作为事件处理函数

返回结果:

  • Object, 返回事件对象本身,便于链式调用

addListener

绑定一个事件处理函数到对象

1 2
Object DgramSocket.addListener(String ev, Function func);

调用参数:

  • ev: String, 指定事件的名称
  • func: Function, 指定事件处理函数

返回结果:

  • Object, 返回事件对象本身,便于链式调用

绑定一个事件处理函数到对象

1
Object DgramSocket.addListener(Object map);

调用参数:

  • map: Object, 指定事件映射关系,对象属性名称将作为事件名称,属性的值将作为事件处理函数

返回结果:

  • Object, 返回事件对象本身,便于链式调用

prependListener

绑定一个事件处理函数到对象起始

1 2
Object DgramSocket.prependListener(String ev, Function func);

调用参数:

  • ev: String, 指定事件的名称
  • func: Function, 指定事件处理函数

返回结果:

  • Object, 返回事件对象本身,便于链式调用

绑定一个事件处理函数到对象起始

1
Object DgramSocket.prependListener(Object map);

调用参数:

  • map: Object, 指定事件映射关系,对象属性名称将作为事件名称,属性的值将作为事件处理函数

返回结果:

  • Object, 返回事件对象本身,便于链式调用

once

绑定一个一次性事件处理函数到对象,一次性处理函数只会触发一次

1 2
Object DgramSocket.once(String ev, Function func);

调用参数:

  • ev: String, 指定事件的名称
  • func: Function, 指定事件处理函数

返回结果:

  • Object, 返回事件对象本身,便于链式调用

绑定一个一次性事件处理函数到对象,一次性处理函数只会触发一次

1
Object DgramSocket.once(Object map);

调用参数:

  • map: Object, 指定事件映射关系,对象属性名称将作为事件名称,属性的值将作为事件处理函数

返回结果:

  • Object, 返回事件对象本身,便于链式调用

prependOnceListener

绑定一个事件处理函数到对象起始

1 2
Object DgramSocket.prependOnceListener(String ev, Function func);

调用参数:

  • ev: String, 指定事件的名称
  • func: Function, 指定事件处理函数

返回结果:

  • Object, 返回事件对象本身,便于链式调用

绑定一个事件处理函数到对象起始

1
Object DgramSocket.prependOnceListener(Object map);

调用参数:

  • map: Object, 指定事件映射关系,对象属性名称将作为事件名称,属性的值将作为事件处理函数

返回结果:

  • Object, 返回事件对象本身,便于链式调用

off

从对象处理队列中取消指定函数

1 2
Object DgramSocket.off(String ev, Function func);

调用参数:

  • ev: String, 指定事件的名称
  • func: Function, 指定事件处理函数

返回结果:

  • Object, 返回事件对象本身,便于链式调用

取消对象处理队列中的全部函数

1
Object DgramSocket.off(String ev);

调用参数:

  • ev: String, 指定事件的名称

返回结果:

  • Object, 返回事件对象本身,便于链式调用

从对象处理队列中取消指定函数

1
Object DgramSocket.off(Object map);

调用参数:

  • map: Object, 指定事件映射关系,对象属性名称作为事件名称,属性的值作为事件处理函数

返回结果:

  • Object, 返回事件对象本身,便于链式调用

removeListener

从对象处理队列中取消指定函数

1 2
Object DgramSocket.removeListener(String ev, Function func);

调用参数:

  • ev: String, 指定事件的名称
  • func: Function, 指定事件处理函数

返回结果:

  • Object, 返回事件对象本身,便于链式调用

取消对象处理队列中的全部函数

1
Object DgramSocket.removeListener(String ev);

调用参数:

  • ev: String, 指定事件的名称

返回结果:

  • Object, 返回事件对象本身,便于链式调用

从对象处理队列中取消指定函数

1
Object DgramSocket.removeListener(Object map);

调用参数:

  • map: Object, 指定事件映射关系,对象属性名称作为事件名称,属性的值作为事件处理函数

返回结果:

  • Object, 返回事件对象本身,便于链式调用

removeAllListeners

从对象处理队列中取消所有事件的所有监听器, 如果指定事件,则移除指定事件的所有监听器。

1
Object DgramSocket.removeAllListeners(String ev);

调用参数:

  • ev: String, 指定事件的名称

返回结果:

  • Object, 返回事件对象本身,便于链式调用

从对象处理队列中取消所有事件的所有监听器, 如果指定事件,则移除指定事件的所有监听器。

1
Object DgramSocket.removeAllListeners(Array evs = []);

调用参数:

  • evs: Array, 指定事件的名称

返回结果:

  • Object, 返回事件对象本身,便于链式调用

setMaxListeners

监听器的默认限制的数量,仅用于兼容

1
DgramSocket.setMaxListeners(Integer n);

调用参数:

  • n: Integer, 指定事件的数量

getMaxListeners

获取监听器的默认限制的数量,仅用于兼容

1
Integer DgramSocket.getMaxListeners();

返回结果:

  • Integer, 返回默认限制数量

listeners

查询对象指定事件的监听器数组

1
Array DgramSocket.listeners(String ev);

调用参数:

  • ev: String, 指定事件的名称

返回结果:

  • Array, 返回指定事件的监听器数组

listenerCount

查询对象指定事件的监听器数量

1
Integer DgramSocket.listenerCount(String ev);

调用参数:

  • ev: String, 指定事件的名称

返回结果:

  • Integer, 返回指定事件的监听器数量

查询对象指定事件的监听器数量

1 2
Integer DgramSocket.listenerCount(Value o, String ev);

调用参数:

  • o: Value, 指定查询的对象
  • ev: String, 指定事件的名称

返回结果:

  • Integer, 返回指定事件的监听器数量

eventNames

查询监听器事件名称

1
Array DgramSocket.eventNames();

返回结果:

  • Array, 返回事件名称数组

emit

主动触发一个事件

1 2
Boolean DgramSocket.emit(String ev, ...args);

调用参数:

  • ev: String, 事件名称
  • args: ..., 事件参数,将会传递给事件处理函数

返回结果:

  • Boolean, 返回事件触发状态,有响应事件返回 true,否则返回 false

toString

返回对象的字符串表示,一般返回 "[Native Object]",对象可以根据自己的特性重新实现

1
String DgramSocket.toString();

返回结果:

  • String, 返回对象的字符串表示

toJSON

返回对象的 JSON 格式表示,一般返回对象定义的可读属性集合

1
Value DgramSocket.toJSON(String key = "");

调用参数:

  • key: String, 未使用

返回结果:

  • Value, 返回包含可 JSON 序列化的值