构建UDP服务

  • UDP不是面向连接的,一个套接字可以与多个UDP服务通信
  • 虽然提供面向事务的简单不可靠信息传输服务,在网络差的情况下存在丢包严重的问题,但是由于它无须连接,资源消耗低,处理快速且灵活,所以常常应用在那种偶尔丢一两个数据包也不会产生重大影响的场景,比如音频、视频等
  • DNS服务就是基于它实现的

创建UDP套接字

  • UDP套接字一旦创建,既可以作为客户端发送数据,也可以作为服务器端接受数据
    var dgram = require('dgram');
    var socket = dgram.createSocket('udp4');
    

创建UDP服务器端

  • 若想让UDP套接字接收网络消息,只要调用dgram.bind(port, [address])方法对网卡和端口进行绑定即可
    var dgram = require('dgram');
    var server = dgram.createSocket('udp4');
    
    // 当访问这台服务器时,会执行下面的
    server.on('message', function(msg, rinfo) {
    	console.log('server got: ' + msg + 'from' + rinfo.address + ':' + rinfo.port);
    });
    
    // UDP套接字是EventEmitter的示例
    // 给server添加监听器
    server.on('listening', function() {
    	var address = server.address();
    	console.log('server listening' + address.address + ':' + address.port);
    });
    
    server.bind(41234);
    

创建UDP客户端

  • 创建一个客户端与服务器端进行对话
    var dgram = require('dgram');
    
    var message = new Buffer('深入浅出Node.js');
    var client = dgram.createSocket('udp4');
    // message 是发送给服务器的消息
    client.send(message, 0, message.length, 41234, 'localhost', function(err, bytes) {
    	client.close();
    })
    
  • 服务器端的命令行将会有如下输出
    在这里插入图片描述
  • send()方法的参数如下
    在这里插入图片描述
  • TCP套接字的write()相比,send()方法的参数列表相对复杂,但是它更灵活的地方在于可以随意发送数据到网络中的服务器端,而TCP如果要发送数据给另一个服务器端,则需要重新通过套接字构造新的连接

UDP套接字事件

UDP套接字是一个EventEmitter实例,具有如下自定义事件

  • ❑ message:当UDP套接字侦听网卡端口后,接收到消息时触发该事件,触发携带的数据为消息Buffer对象和一个远程地址信息。
  • ❑ listening:当UDP套接字开始侦听时触发该事件。
  • ❑ close:调用close()方法时触发该事件,并不再触发message事件。如需再次触发message事件,重新绑定即可。
  • ❑ error:当异常发生时触发该事件,如果不侦听,异常将直接抛出,使进程退出
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值