JS代码信息

运行结果
教程手册
代码仓库
极速运行
交互输入
极速运行模式,不支持键盘输入语句但是拥有更高的运行速度,输出简洁明了 。 点击编辑器上方的运行按钮即刻体验吧。
以下是用户最新保存的代码
shuguo-access 发布于:2020-10-20 17:36 外部样式 发布于:2020-10-20 16:51 33rrrrtr 发布于:2020-10-20 16:46 study 发布于:2020-10-20 16:43 vscode代码片段 发布于:2020-10-20 14:26 淘宝详情页抓取 发布于:2020-10-20 17:41 js功能测试 发布于:2020-10-19 17:43 serviceworker.js 发布于:2020-10-19 10:26 设计模式单例模式 发布于:2020-10-18 15:15 手写代码练习---时间戳格式化(2020-10-1... 发布于:2020-10-19 09:26 JWT(json-web-token)-认识与学习 发布于:2020-10-17 17:43 淘宝订单列表抓取 发布于:2020-10-20 17:46 实训五课程表 发布于:2020-10-16 09:33 测试迭代器 发布于:2020-10-15 22:17 scihub修改2.0 发布于:2020-10-15 21:40 函数实现一个大位数乘法,可以计算出诸如186545... 发布于:2020-10-19 16:23 创建单向链表 发布于:2020-10-15 15:52 Generator遍历满二叉树 发布于:2020-10-15 15:33 Generater实现取出嵌套数组的所有成员 发布于:2020-10-15 15:09 Generator实现斐波那契数列 发布于:2020-10-15 14:23 Generator第一次next传值 发布于:2020-10-15 14:06 数据结构-随机生成双向图 发布于:2020-10-15 11:43 test1 发布于:2020-10-14 20:16 面试题测试 发布于:2020-10-14 20:03 实现forEach 和 其他数组方法 发布于:2020-10-14 17:16 leetcode 91 DEcode Ways 发布于:2020-10-15 11:17 云浏览器main 发布于:2020-10-19 23:16 leetCode 279 /给定正整数 ... 发布于:2020-10-15 11:15 快速排序代码 发布于:2020-10-15 14:23 手写虚拟dom 发布于:2020-10-13 18:04 位运算实现加减乘除 发布于:2020-10-13 17:25 快速排序1.1 发布于:2020-10-13 17:01 冒泡排序 练手项目 发布于:2020-10-13 16:56 访问端判断JS 发布于:2020-10-13 10:16 两个数组的交集 发布于:2020-10-13 09:25 封装axois拦截重复请求 发布于:2020-10-12 17:57 封装axois拦截重复请求 发布于:2020-10-12 17:54 leet code 343 发布于:2020-10-14 16:42 手写代码练习----jsonp , ajax 发布于:2020-10-13 00:25 Promise 基础使用 发布于:2020-10-11 15:58 手写代码练习---深拷贝 发布于:2020-10-11 10:53 手写代码练习---extend 与 Object.... 发布于:2020-10-11 00:17 微信支付逻辑伪代码 发布于:2020-10-10 16:45 手写代码练习----promise的实现 发布于:2020-10-10 23:02 手写代码练习-----类数组转数组 发布于:2020-10-09 18:49 快速排序1.1 发布于:2020-10-08 23:47 快速排序1.0 发布于:2020-10-08 19:52 实现深拷贝 发布于:2020-10-09 17:33 手写代码练习-----原型继承 ,class 继承 发布于:2020-10-08 00:52 手写代码练习-----模拟new运算 instan... 发布于:2020-10-06 22:50 [更多]
显示目录

网络

网络

稳定性: 3 - 稳定

net模块提供了异步网络封装,该Node.js模块包含了创建服务器/客户端的方法(调用 streams),你可以通过调用 require('net') 包含这个模块,访问方法如下所示:

const net = require('net');

net.createServer([options][, connectionListener])

创建一个TCP服务器。参数connectionListener自动给'connection'事件创建监听器。

options包含有以下默认值:

{
  allowHalfOpen: false,
  pauseOnConnect: false
}

如果allowHalfOpen\=true,当另一端socket发送FIN包时,socket不会自动发送FIN包。socket变为不可读,但仍可写。你需要显式的调用end()方法。更多信息参见'end'事件。

如果pauseOnConnect\=true,当连接到来的时候相关联的socket将会暂停。它允许在初始进程不读取数据情况下,让连接在进程间传递。调用resume()从暂停的socket里读取数据。

下面是一个监听8124端口连接的应答服务器的例子:

var net = require('net');
var server = net.createServer(function(c) { //'connection' listener
  console.log('client connected');
  c.on('end', function() {
    console.log('client disconnected');
  });
  c.write('hello\r\n');
  c.pipe(c);
});
server.listen(8124, function() { //'listening' listener
  console.log('server bound');
});

使用telnet来测试:

telnet localhost 8124

要监听socket t/tmp/echo.sock,仅需要改倒数第三行代码,如下所示:

server.listen('/tmp/echo.sock', function() { //'listening' listener

使用nc连接到一个UNIX domain socket服务器:

nc -U /tmp/echo.sock

net.connect(options[, connectionListener])

net.createConnection(options[, connectionListener])

工厂方法,返回一个新的'net.Socket',并连接到指定的地址和端口。

当socket建立的时候,将会触发'connect'事件。

'net.Socket'有相同的方法。

对于TCP sockets,参数options因为下列参数的对象:

  • port: 客户端连接到Port的端口(必须)。

  • host: 客户端要连接到得主机。默认'localhost'.

  • localAddress: 网络连接绑定的本地接口。

  • localPort: 网络连接绑定的本地端口。

  • family : IP栈版本。默认4

对于本地域socket,参数options因为下列参数的对象:

  • path: 客户端连接到得路径(必须).

通用选项:

  • 如果allowHalfOpen\=true, 当另一端socket发送FIN包时socket不会自动发送FIN包。socket变为不可读,但仍可写。你需要显式的调用end()方法。更多信息参见'end'事件。

    connectListener参数将会作为监听器添加到'connect'事件上。

下面是一个用上述方法应答服务器的客户端例子:

var net = require('net');
var client = net.connect({port: 8124},
    function() { //'connect' listener
  console.log('connected to server!');
  client.write('world!\r\n');
});
client.on('data', function(data) {
  console.log(data.toString());
  client.end();
});
client.on('end', function() {
  console.log('disconnected from server');
});

要连接到socket/tmp/echo.sock,仅需将第二行代码改为如下的内容:

var client = net.connect({path: '/tmp/echo.sock'});

net.connect(port[, host][, connectListener])

net.createConnection(port[, host][, connectListener])

创建一个到端口port和主机host的TCP连接。如果忽略主机host,则假定为'localhost'。参数connectListener将会作为监听器添加到'connect'事件。

这是工厂方法,返回一个新的'net.Socket'

net.connect(path[, connectListener])

net.createConnection(path[, connectListener])

创建到path的unix socket连接。参数connectListener将会作为监听器添加到'connect'事件上。

这是工厂方法,返回一个新的'net.Socket'

Class: net.Server

这个类用来创建一个TCP或本地服务器。

server.listen(port[, host][, backlog][, callback])

开始接受指定端口port和主机host的连接。如果忽略主机host, 服务器将会接受任何IPv4地址(INADDR_ANY)的直接连接。端口为0,则会分配一个随机端口。

积压量(Backlog)为连接等待队列的最大长度。实际长度由您的操作系统通过 sysctl 设定,比如 linux 上的tcp_max_syn_backlogsomaxconn。这个参数默认值是511(不是512)。

这是异步函数。当服务器被绑定时会触发'listening'事件。最后一个参数callback将会作为'listening'事件的监听器。

有些用户会遇到EADDRINUSE错误,它表示另外一个服务器已经运行在所请求的端口上。处理这个情况的办法是等一段事件再重试:

server.on('error', function (e) {
  if (e.code == 'EADDRINUSE') {
    console.log('Address in use, retrying...');
    setTimeout(function () {
      server.close();
      server.listen(PORT, HOST);
    }, 1000);
  }
});

(注意:Node中的所有socket已设置了SO_REUSEADDR)

server.listen(path[, callback])

  • path {String}
  • callback {Function}

启动一个本地socket服务器,监听指定path的连接。

这是异步函数。绑定服务器后,会触发'listening'事件。最后一个参数callback将会作为'listening'事件的监听器。

UNIX上,本地域通常默认为UNIX域。参数path是文件系统路径,就和创建文件时一样,它也遵从命名规则和权限检查,并且在文件系统里可见,并持续到关闭关联。

Windows上,本地域通过命名管道实现。路径必须是以\\?\pipe\\\.\pipe\入口。任意字符串都可以,不过之后进行相同的管道命名处理,比如解决..序列。管道命名空间是平的。管道不会一直持久,当最后一个引用关闭的时候,管道将会移除。不要忘记javascript字符字符串转义要求路径使用双反斜杠,比如:

net.createServer().listen(
    path.join('\\\\?\\pipe', process.cwd(), 'myctl'))

server.listen(handle[, callback])

  • handle {Object}
  • callback {Function}

    handle 对象可以设置成server或socket(任意以下划线_handle开头的类),或者是{fd: <n>}对象。

这将是服务器用指定的句柄接收连接,前提是文件描述符或句柄已经绑定到端口或域socket。

Windows不支持监听文件句柄。

这是异步函数。当服务器已经被绑定,将会触发'listening'事件。最后一个参数callback将会作为'listening'事件的监听器。

server.listen(options[, callback])

  • options {Object} - 必须有。支持以下属性:
    • port {Number} - 可选。
    • host {String} - 可选。
    • backlog {Number} - 可选。
    • path {String} - 可选。
    • exclusive {Boolean} - 可选。
  • callback {Function} - 可选。

options的属性:端口port,主机host,和backlog,以及可选参数callback函数,他们在一起调用server.listen(port, [host], [backlog], [callback])。还有,参数path可以用来指定UNIX socket。

如果参数exclusivefalse(默认值),集群进程将会使用同一个句柄,允许连接共享。当参数exclusivetrue时,句柄不会共享,如果共享端口会返回错误。监听独家端口例子如下:

server.listen({
  host: 'localhost',
  port: 80,
  exclusive: true
});

server.close([callback])

服务器停止接收新的连接,保持现有连接。这是异步函数,当所有连接结束的时候服务器会关闭,并会触发'close'事件。你可以传一个回调函数来监听'close' 事件。如果存在,将会调用回调函数,错误(如果有)作为唯一参数。

server.address()

操作系统返回绑定的地址,协议族名和服务器端口。查找哪个端口已经被系统绑定时,非常有用。返回的对象有3个属性,比如:{ port: 12346, family: 'IPv4', address: '127.0.0.1' }

例如:

var server = net.createServer(function (socket) {
  socket.end("goodbye\n");
});

// grab a random port.
server.listen(function() {
  address = server.address();
  console.log("opened server on %j", address);
});

'listening'事件触发前,不要调用server.address()

server.unref()

如果这是事件系统中唯一一个活动的服务器,调用unref将允许程序退出。如果服务器已被unref,则再次调用unref并不会产生影响。

server.ref()

unref相反,如果这是唯一的服务器,在之前被unref了的服务器上调用ref将不会让程序退出(默认行为)。如果服务器已经被ref,则再次调用ref并不会产生影响。

server.maxConnections

设置这个选项后,当服务器连接数超过数量时拒绝新连接。

一旦已经用child_process.fork()方法将socket发送给子进程, 就不推荐使用这个选项。

server.connections

已经抛弃这个函数。请用server.getConnections()代替。服务器上当前连接的数量。

当调用child_process.fork()发送一个socket给子进程时,它将变为null。 要轮询子进程来获取当前活动连接的数量,请用server.getConnections代替。

server.getConnections(callback)

异步获取服务器当前活跃连接的数量。当socket发送给子进程后才有效;

回调函数有2个参数errcount

net.Server是事件分发器EventEmitter, 有以下事件:

事件: 'listening'

当服务器调用server.listen绑定后会触发。

事件:'connection'

  • {Socket object} 连接对象

当新连接创建后会被触发。socketnet.Socket实例。

事件: 'close'

服务器关闭时会触发。注意,如果存在连接,这个事件不会被触发直到所有的连接关闭。

事件: 'error'

  • {Error Object}

发生错误时触发。'close'事件将被下列事件直接调用。请查看server.listen例子。

Class: net.Socket

这个对象是TCP或UNIX Socket的抽象。net.Socket实例实现了一个双工流接口。他们可以在用户创建客户端(使用connect())时使用,或者由Node创建它们,并通过connection服务器事件传递给用户。

new net.Socket([options])

构造一个新的socket对象。

options对象有以下默认值:

{ fd: null
  allowHalfOpen: false,
  readable: false,
  writable: false
}

参数fd允许你指定一个存在的文件描述符。将readable和(或)writable设为true,允许在这个socket上读和(或)写(注意,仅在参数fd有效时)。关于allowHalfOpen,参见createServer()'end'事件。

socket.connect(port[, host][, connectListener])

socket.connect(path[, connectListener])

使用传入的socket打开一个连接。如果指定了端口port和主机host,TCP socket将打开socket。如果忽略参数host,则默认为localhost。如果指定了 path,socket将会被指定路径的unix socket打开。

通常情况不需要使用这个函数,比如使用net.createConnection打开socket。只有你实现了自己的socket时才会用到。

这是异步函数。当'connect'事件被触发时,socket已经建立。如果这是问题连接,'connect'事件不会被触发,将会抛出'error'事件。

参数connectListener将会作为监听器添加到'connect'事件。

socket.bufferSize

socket.bufferSize是net.Socket的一个属性,用于socket.write()。它能够帮助用户获取更快的运行速度。计算机不能一直处于写入大量数据状态--网络连接可能太慢。Node在内部会将排队数据写入到socket,并在网络可用时发送。(内部实现:轮询socket的文件描述符直到变为可写)。

这种内部缓冲的缺点是会增加内存使用量。这个属性表示当前准备写的缓冲字符数。(字符的数量等于准备写入的字节的数量,但是缓冲区可能包含字符串,这些字符串是惰性编码的,所以准确的字节数还无法知