mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-01 18:50:34 +03:00
docs(esp_http_server): adds doc and migration entry for ws server post handshake cb
Closes https://github.com/espressif/esp-idf/issues/18539
This commit is contained in:
committed by
Zhang Shuxian
parent
ddfb7e4b58
commit
d0401f2f4e
@@ -104,6 +104,80 @@ The deprecated :cpp:func:`esp_tls_conn_http_new` function has been removed. Use
|
||||
|
||||
The new API requires you to create the :cpp:type:`esp_tls_t` structure using :cpp:func:`esp_tls_init` and provides better control over the connection process.
|
||||
|
||||
ESP HTTP Server
|
||||
---------------
|
||||
|
||||
WebSocket Handler No Longer Called During Handshake
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
From v6.0.1, the URI handler registered
|
||||
for a WebSocket endpoint is **no longer called** during the WebSocket handshake.
|
||||
Prior to this change, the handler was invoked with ``req->method == HTTP_GET``
|
||||
immediately after the handshake completed, which applications used for
|
||||
connection-time initialization:
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
/* Pre-v6.0.1 pattern — no longer works from v6.0.1 onwards */
|
||||
static esp_err_t ws_handler(httpd_req_t *req)
|
||||
{
|
||||
if (req->method == HTTP_GET) {
|
||||
ESP_LOGI(TAG, "New WebSocket connection established");
|
||||
return ESP_OK;
|
||||
}
|
||||
/* Handle WebSocket frames ... */
|
||||
}
|
||||
|
||||
From v6.0.1, the handler is invoked only for subsequent WebSocket data frames,
|
||||
so the ``HTTP_GET`` check is no longer needed in frame handlers.
|
||||
|
||||
Migration Options
|
||||
^^^^^^^^^^^^^^^^^
|
||||
|
||||
**Option 1 (Recommended)** — Move connection-time logic into a dedicated post-handshake callback:
|
||||
|
||||
1. Enable :ref:`CONFIG_HTTPD_WS_POST_HANDSHAKE_CB_SUPPORT` in menuconfig.
|
||||
2. Register a ``ws_post_handshake_cb`` on the ``httpd_uri_t`` struct. The frame handler
|
||||
remains clean with no ``HTTP_GET`` check.
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
static esp_err_t ws_on_connect(httpd_req_t *req)
|
||||
{
|
||||
ESP_LOGI(TAG, "New WebSocket connection established");
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
static esp_err_t ws_handler(httpd_req_t *req)
|
||||
{
|
||||
/* Handle WebSocket frames only */
|
||||
}
|
||||
|
||||
static const httpd_uri_t ws_uri = {
|
||||
.uri = "/ws",
|
||||
.method = HTTP_GET,
|
||||
.handler = ws_handler,
|
||||
.is_websocket = true,
|
||||
.ws_post_handshake_cb = ws_on_connect,
|
||||
};
|
||||
|
||||
**Option 2 (Minimal change)** — Set ``.ws_post_handshake_cb`` to the same function as ``.handler``:
|
||||
|
||||
1. Enable :ref:`CONFIG_HTTPD_WS_POST_HANDSHAKE_CB_SUPPORT` in menuconfig.
|
||||
2. Set ``.ws_post_handshake_cb = ws_handler`` in the URI registration. The existing
|
||||
``if (req->method == HTTP_GET)`` check inside the handler continues to work
|
||||
without any further code changes.
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
static const httpd_uri_t ws_uri = {
|
||||
.uri = "/ws",
|
||||
.method = HTTP_GET,
|
||||
.handler = ws_handler,
|
||||
.is_websocket = true,
|
||||
.ws_post_handshake_cb = ws_handler, /* same function restores old behavior */
|
||||
};
|
||||
|
||||
ESP-Modbus
|
||||
----------
|
||||
|
||||
|
||||
Reference in New Issue
Block a user