esp-idf/examples/protocols/https_server/wss_server
Shubham Kulkarni 0a395134d4 Split example_tests with Example_WIFI tag group into Example_OTA and Example_Protocols 2021-04-15 04:00:06 +00:00
..
main esp_http_server: Fix examples parse ws keep-alive packet fail. 2021-03-16 09:55:02 +05:30
CMakeLists.txt
Makefile Whitespace: Automated whitespace fixes (large commit) 2020-11-11 07:36:35 +00:00
README.md esp_http_server: support dynamic payload len for ws server 2021-02-24 11:40:34 +00:00
sdkconfig.defaults
wss_server_example_test.py Split example_tests with Example_WIFI tag group into Example_OTA and Example_Protocols 2021-04-15 04:00:06 +00:00

README.md

HTTP Websocket server with SSL support

This example creates a SSL server and employs a simple Websocket request handler. It demonstrates handling multiple clients from the server including:

  • PING-PONG mechanism
  • Sending asynchronous messages to all clients

See the esp_https_server component documentation for details.

Before using the example, open the project configuration menu (idf.py menuconfig) to configure Wi-Fi or Ethernet. See "Establishing Wi-Fi or Ethernet Connection" section in examples/protocols/README.md for more details.

httpd_ws_recv_frame support two ways to get frame payload.

  • Static buffer -- Allocate maximum expected packet length (either statically or dynamically) and call httpd_ws_recv_frame() referencing this buffer and it's size. (Unnecessarily large buffers might cause memory waste)
#define MAX_PAYLOAD_LEN 128
uint8_t buf[MAX_PAYLOAD_LEN] = { 0 };
httpd_ws_frame_t ws_pkt;
ws_pkt.payload = buf;
httpd_ws_recv_frame(req, &ws_pkt, MAX_PAYLOAD_LEN);
  • Dynamic buffer -- Refer to the examples, which receive websocket data in these three steps:
    1. Call httpd_ws_recv_frame() with zero buffer size
    2. Allocate the size based on the received packet length
    3. Call httpd_ws_recv_frame() with the allocated buffer

Certificates

You will need to approve a security exception in your browser. This is because of a self signed certificate; this will be always the case, unless you preload the CA root into your browser/system as trusted.

You can generate a new certificate using the OpenSSL command line tool:

openssl req -newkey rsa:2048 -nodes -keyout prvtkey.pem -x509 -days 3650 -out cacert.pem -subj "/CN=ESP32 HTTPS server example"

Expiry time and metadata fields can be adjusted in the invocation.

Please see the openssl man pages (man openssl-req) for more details.

It is strongly recommended to not reuse the example certificate in your application; it is included only for demonstration.