阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      Node.js dgram socket.bind

      Node.js dgram

      socket.bind([port][, address][, callback])

      新增于: v0.1.99

      • port < number> 整数。
      • address < string>
      • callback < Function> 没有参数。当绑定完成时会被调用。

      对于 UDP socket,该方法会令dgram.Socket在指定的port和可选的address上监听数据包信息。若port未指定或为 0,操作系统会尝试绑定一个随机的端口。若address未指定,操作系统会尝试在所有地址上监听。绑定完成时会触发一个’listening’事件,并会调用callback方法。

      注意,同时监听’listening’事件和在socket.bind()方法中传入callback参数并不会带来坏处,但也不是很有用。

      一个被绑定的数据包 socket 会令 Node.js 进程保持运行以接收数据包信息。

      若绑定失败,一个’error’事件会被触发。在极少数的情况下(例如尝试绑定一个已关闭的 socket),一个 Error 会被抛出。

      一个监听 41234 端口的 UDP 服务器的例子:

      const dgram = require('dgram');
      const server = dgram.createSocket('udp4');
      
      server.on('error', (err) => {
        console.log(`服务器异常:\n${err.stack}`);
        server.close();
      });
      
      server.on('message', (msg, rinfo) => {
        console.log(`服务器收到:${msg} 来自 ${rinfo.address}:${rinfo.port}`);
      });
      
      server.on('listening', () => {
        const address = server.address();
        console.log(`服务器监听 ${address.address}:${address.port}`);
      });
      
      server.bind(41234);
      // 服务器监听 0.0.0.0:41234
      

      socket.bind(options[, callback])

      新增于: v0.11.14

      • options < Object> 必要的。包含以下属性
        • port < integer>
        • address < string>
        • exclusive < boolean>
      • callback < Function>

      对于 UDP socket,该方法会令dgram.Socket在指定的port和可选的address上监听数据包信息。若port未指定或为 0,操作系统会尝试绑定一个随机的端口。若address未指定,操作系统会尝试在所有地址上监听。绑定完成时会触发一个’listening’事件,并会调用callback方法。

      Note that specifying both a ‘listening’ event listener and passing a callback to the socket.bind() method is not harmful but not very useful.

      在配合cluster模块使用dgram.Socket对象时, options对象可能包含一个附加的exclusive属性。当exclusive被设为false(默认值)时,集群工作单元会使用相同的 socket 句柄来共享连接处理作业。当exclusive被设为true时,该句柄将不会被共享,而尝试共享端口则会造成错误。

      一个绑定的数据报 socket 会使 Node.js 进程持续运行以接受数据报消息。

      如果绑定失败,一个 ‘error’ 事件会产生。在极少数情况下(例如尝试绑定一个已经关闭的 socket), 一个 Error 可能抛出。

      一个不共享端口的 socket 的例子如下文所示。

      socket.bind({
        address: 'localhost',
        port: 8000,
        exclusive: true
      });
      

      更改为异步的 socket.bind()

      从Node.js v0.10开始,[dgram.Socket#bind()][]更改为异步执行模型。旧代码采用同步行为,

      如下例所示:

      const s = dgram.createSocket('udp4');
      s.bind(1234);
      s.addMembership('224.0.0.114');
      

      必须改为传递一个回调函数到[dgram.Socket#bind()][]:

      const s = dgram.createSocket('udp4');
      s.bind(1234, () => {
        s.addMembership('224.0.0.114');
      });
      

      更多内容请参考:Node.js debugger 调试器,或者通过 点击对应菜单 进行查看;


      目录
      目录