You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.8 KiB
56 lines
1.8 KiB
4 months ago
|
# h2 long poll in lws
|
||
|
|
||
|
lws server and client can support "immortal" streams that are
|
||
|
not subject to normal timeouts under a special condition. These
|
||
|
are read-only (to the client).
|
||
|
|
||
|
Network connections that contain at least one immortal stream
|
||
|
are themselves not subject to timeouts until the last immortal
|
||
|
stream they are carrying closes.
|
||
|
|
||
|
Because of this, it's recommended there is some other way of
|
||
|
confirming that the client is still active.
|
||
|
|
||
|
## Setting up lws server for h2 long poll
|
||
|
|
||
|
Vhosts that wish to allow clients to serve these immortal
|
||
|
streams need to set the info.options flag `LWS_SERVER_OPTION_VH_H2_HALF_CLOSED_LONG_POLL`
|
||
|
at vhost creation time. The JSON config equivalent is to set
|
||
|
|
||
|
```
|
||
|
"h2-half-closed-long-poll": "1"
|
||
|
```
|
||
|
|
||
|
on the vhost. That's all that is needed.
|
||
|
|
||
|
Streams continue to act normally for timeout with the exception
|
||
|
client streams are allowed to signal they are half-closing by
|
||
|
sending a zero-length DATA frame with END_STREAM set. These
|
||
|
streams are allowed to exist outside of any timeout and data
|
||
|
can be sent on them at will in the server -> client direction.
|
||
|
|
||
|
## Setting client streams for long poll
|
||
|
|
||
|
An API is provided to allow established h2 client streams to
|
||
|
transition to immortal mode and send the END_STREAM to the server
|
||
|
to indicate it.
|
||
|
|
||
|
```
|
||
|
int
|
||
|
lws_h2_client_stream_long_poll_rxonly(struct lws *wsi);
|
||
|
```
|
||
|
|
||
|
## Example applications
|
||
|
|
||
|
You can confirm the long poll flow simply using example applications.
|
||
|
Build and run `http-server/minimal-http-server-h2-long-poll` in one
|
||
|
terminal.
|
||
|
|
||
|
In another, build the usual `http-client/minimal-http-client` example
|
||
|
and run it with the flags `-l --long-poll`
|
||
|
|
||
|
The client will connect to the server and transition to the immortal mode.
|
||
|
The server sends a timestamp every minute to the client, and that will
|
||
|
stay up without timeouts.
|
||
|
|