ws

您所在的位置:网站首页 wsandroid ws

ws

2023-04-15 01:44| 来源: 网络整理| 查看: 265

ws: a Node.js WebSocket library

Version npm CI Coverage Status

ws is a simple to use, blazing fast, and thoroughly tested WebSocket client and server implementation.

Passes the quite extensive Autobahn test suite: server, client.

Note: This module does not work in the browser. The client in the docs is a reference to a back end with the role of a client in the WebSocket communication. Browser clients must use the native WebSocket object. To make the same code work seamlessly on Node.js and the browser, you can use one of the many wrappers available on npm, like isomorphic-ws.

Table of Contents Protocol support Installing Opt-in for performance API docs WebSocket compression Usage examples Sending and receiving text data Sending binary data Simple server External HTTP/S server Multiple servers sharing a single HTTP/S server Client authentication Server broadcast Round-trip time Use the Node.js streams API Other examples FAQ How to get the IP address of the client? How to detect and close broken connections? How to connect via a proxy? Changelog License Protocol support HyBi drafts 07-12 (Use the option protocolVersion: 8) HyBi drafts 13-17 (Current default, alternatively option protocolVersion: 13) Installing npm install ws Opt-in for performance

There are 2 optional modules that can be installed along side with the ws module. These modules are binary addons that improve the performance of certain operations. Prebuilt binaries are available for the most popular platforms so you don't necessarily need to have a C++ compiler installed on your machine.

npm install --save-optional bufferutil: Allows to efficiently perform operations such as masking and unmasking the data payload of the WebSocket frames. npm install --save-optional utf-8-validate: Allows to efficiently check if a message contains valid UTF-8.

To not even try to require and use these modules, use the WS_NO_BUFFER_UTIL and WS_NO_UTF_8_VALIDATE environment variables. These might be useful to enhance security in systems where a user can put a package in the package search path of an application of another user, due to how the Node.js resolver algorithm works.

The utf-8-validate module is not needed and is not required, even if it is already installed, regardless of the value of the WS_NO_UTF_8_VALIDATE environment variable, if buffer.isUtf8() is available.

API docs

See /doc/ws.md for Node.js-like documentation of ws classes and utility functions.

WebSocket compression

ws supports the permessage-deflate extension which enables the client and server to negotiate a compression algorithm and its parameters, and then selectively apply it to the data payloads of each WebSocket message.

The extension is disabled by default on the server and enabled by default on the client. It adds a significant overhead in terms of performance and memory consumption so we suggest to enable it only if it is really needed.

Note that Node.js has a variety of issues with high-performance compression, where increased concurrency, especially on Linux, can lead to catastrophic memory fragmentation and slow performance. If you intend to use permessage-deflate in production, it is worthwhile to set up a test representative of your workload and ensure Node.js/zlib will handle it with acceptable performance and memory usage.

Tuning of permessage-deflate can be done via the options defined below. You can also use zlibDeflateOptions and zlibInflateOptions, which is passed directly into the creation of raw deflate/inflate streams.

See the docs for more options.

import WebSocket, { WebSocketServer } from 'ws'; const wss = new WebSocketServer({ port: 8080, perMessageDeflate: { zlibDeflateOptions: { // See zlib defaults. chunkSize: 1024, memLevel: 7, level: 3 }, zlibInflateOptions: { chunkSize: 10 * 1024 }, // Other options settable: clientNoContextTakeover: true, // Defaults to negotiated value. serverNoContextTakeover: true, // Defaults to negotiated value. serverMaxWindowBits: 10, // Defaults to negotiated value. // Below options specified as default values. concurrencyLimit: 10, // Limits zlib concurrency for perf. threshold: 1024 // Size (in bytes) below which messages // should not be compressed if context takeover is disabled. } });

The client will only use the extension if it is supported and enabled on the server. To always disable the extension on the client set the perMessageDeflate option to false.

import WebSocket from 'ws'; const ws = new WebSocket('ws://www.host.com/path', { perMessageDeflate: false }); Usage examples Sending and receiving text data import WebSocket from 'ws'; const ws = new WebSocket('ws://www.host.com/path'); ws.on('error', console.error); ws.on('open', function open() { ws.send('something'); }); ws.on('message', function message(data) { console.log('received: %s', data); }); Sending binary data import WebSocket from 'ws'; const ws = new WebSocket('ws://www.host.com/path'); ws.on('error', console.error); ws.on('open', function open() { const array = new Float32Array(5); for (var i = 0; i { this.terminate(); }, 30000 + 1000); } const client = new WebSocket('wss://websocket-echo.com/'); client.on('error', console.error); client.on('open', heartbeat); client.on('ping', heartbeat); client.on('close', function clear() { clearTimeout(this.pingTimeout); }); How to connect via a proxy?

Use a custom http.Agent implementation like https-proxy-agent or socks-proxy-agent.

Changelog

We're using the GitHub releases for changelog entries.

License

MIT



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3