What is aws-crt?
The aws-crt npm package is a low-level client library for AWS services, providing a high-performance, cross-platform implementation of the AWS Common Runtime (CRT). It offers functionalities for networking, cryptography, and other foundational services that are essential for building AWS SDKs and other AWS-related applications.
What are aws-crt's main functionalities?
MQTT Client
This feature allows you to create an MQTT client to connect to AWS IoT Core. The code sample demonstrates how to set up the client, connect to the broker, subscribe to a topic, and handle incoming messages.
const { mqtt } = require('aws-crt');
const client = mqtt.Client({
host: 'example.iot.region.amazonaws.com',
port: 8883,
clientId: 'myClientId',
clean: true,
keepAlive: 60,
protocol: 'mqtts',
key: 'path/to/private-key.pem',
cert: 'path/to/certificate.pem',
ca: 'path/to/ca.pem'
});
client.on('connect', () => {
console.log('Connected to MQTT broker');
client.subscribe('my/topic', { qos: 1 });
});
client.on('message', (topic, message) => {
console.log(`Received message: ${message.toString()} on topic: ${topic}`);
});
client.connect();
HTTP Client
This feature provides an HTTP client for making HTTP requests. The code sample shows how to create an HTTP client, make a GET request, and handle the response.
const { http } = require('aws-crt');
const client = new http.HttpClient();
const request = new http.HttpRequest('https://example.com', 'GET');
client.request(request, (response) => {
console.log(`Status Code: ${response.statusCode}`);
response.on('data', (chunk) => {
console.log(`Body: ${chunk.toString()}`);
});
});
WebSocket Client
This feature allows you to create a WebSocket client for real-time communication. The code sample demonstrates how to set up the client, connect to a WebSocket server, send messages, and handle incoming messages.
const { websocket } = require('aws-crt');
const client = new websocket.WebSocketClient('wss://example.com/socket');
client.on('open', () => {
console.log('WebSocket connection opened');
client.send('Hello, WebSocket!');
});
client.on('message', (message) => {
console.log(`Received message: ${message}`);
});
client.on('close', () => {
console.log('WebSocket connection closed');
});
client.connect();
Other packages similar to aws-crt
aws-sdk
The aws-sdk package is the official AWS SDK for JavaScript, providing a higher-level abstraction over AWS services. It is more user-friendly and feature-rich compared to aws-crt, which is a lower-level library focused on performance and foundational services.
mqtt
The mqtt package is a popular MQTT client for Node.js. While it offers similar MQTT functionalities as aws-crt, it does not provide the same level of integration with AWS services and lacks the additional features like HTTP and WebSocket clients.
axios
Axios is a widely-used HTTP client for Node.js and the browser. It provides a simpler and more user-friendly API for making HTTP requests compared to the low-level HTTP client in aws-crt.
ws
The ws package is a simple and fast WebSocket client for Node.js. It offers similar WebSocket functionalities as aws-crt but does not include the additional AWS-specific features.
AWS CRT Node.js
Node.js bindings for the AWS Common Runtime.
Note that this module currently only supports Linux and macOS.
License
This library is licensed under the Apache 2.0 License.
Building the project
Dependencies
Requirements:
- Clang 3.9+ or GCC 4.4+
- libssl-dev (on Linux/Unix POSIX platforms)
- cmake 3.1+
- Node.js 10.x or newer
Linux/Unix
$ apt-get install cmake3 libssl-dev -y
OSX
$ brew install cmake
Running the build
$ export AWS_C_INSTALL=/path/to/install/root/
$ git submodule update --init
$ npm install