![]() This changes the vhost destroy flow to only hand off the listen socket if another vhost sharing it, and mark the vhost as being_destroyed. Each tsi calls lws_check_deferred_free() once a second, if it sees any vhost being_destroyed there, it closes all wsi on its tsi on the same vhost, one time. As the wsi on the vhost complete close (ie, after libuv async close if on libuv event loop), they decrement a reference count for all wsi open on the vhost. The tsi who closes the last one then completes the destroy flow for the vhost itself... it's random which tsi completes the vhost destroy but since there are no wsi left on the vhost, and it holds the context lock, nothing can conflict. The advantage of this is that owning tsi do the close for wsi that are bound to the vhost under destruction, at a time when they are guaranteed to be idle for service, and they do it with both vhost and context locks owned, so no other service thread can conflict for stuff protected by those either. For the situation the user code may have allocations attached to the vhost, this adds args to lws_vhost_destroy() to allow destroying the user allocations just before the vhost is freed. |
||
---|---|---|
cmake | ||
contrib | ||
doc-assets | ||
lib | ||
lwsws | ||
minimal-examples | ||
plugin-standalone | ||
plugins | ||
READMEs | ||
scripts | ||
test-apps | ||
win32port | ||
.gitignore | ||
.travis.yml | ||
appveyor.yml | ||
changelog | ||
CMakeLists.txt | ||
component.mk | ||
Kconfig | ||
libwebsockets.dox | ||
LICENSE | ||
Makefile.projbuild | ||
README.md |
News
v3.0.0 released
See the changelog for info https://libwebsockets.org/git/libwebsockets/tree/changelog?h=v3.0-stable
Major CI improvements for QA
The Travis build of lws done on every commit now runs
Tests | Count | Explanation |
---|---|---|
Build / Linux / gcc | 14 | -Wall -Werror cmake config variants |
Build / Mac / Clang | 14 | -Wall -Werror cmake config variants |
Build / Windows / MSVC | 7 | default |
Selftests | openssl:33, mbedtls:33 | minimal examples built and run against each other and remote server |
attack.sh | 225 | Correctness, robustness and security tests for http parser |
Autobahn Server | 480 | Testing lws ws client, including permessage-deflate |
Autobahn Client | 480 | Testing lws ws server, including permaessage-deflate |
h2spec | openssl:146, mbedtls:146 | Http/2 server compliance suite (in strict mode) |
h2load | openssl:6, mbedtls:6 | Http/2 server load tool (checks 10K / 100K in h1 and h2, at 1, 10, 100 concurrency) |
h2load SMP | 6 | Http/2 and http/1.1 server load checks on SMP server build |
The over 1,500 tests run on every commit take most of an hour to complete. If any problems are found, it breaks the travis build, generating an email.
Current master passes all the tests and these new CI arrangements will help keep it that way.
Lws has the first official ws-over-h2 server support
There's a new standard on the RFC track that enables multiplexing ws connections over an http/2 link. Compared to making individual tcp and tls connections for each ws link back to the same server, this makes your site start up radically faster, and since all the connections are in one tls tunnel, with considerable memory reduction serverside.
To enable it on master you just need -DLWS_WITH_HTTP2=1 at cmake. No changes to existing code are necessary for either http/2 (if you use the official header creation apis if you return your own headers, as shown in the test apps for several versions) or to take advantage of ws-over-h2. When built with http/2 support, it automatically falls back to http/1 and traditional ws upgrade if that's all the client can handle.
Currently only Chrome Canary v67 supports this ws-over-h2 encapsulation (chrome
must be started with --enable-websocket-over-http2
switch to enable it currently)
but the other browsers will catch up soon.
New "minimal examples"
https://libwebsockets.org/git/libwebsockets/tree/minimal-examples
These are like the test apps, but focus on doing one thing, the best way, with the minimum amount of code. For example the minimal-http-server serves the cwd on http/1 or http/2 in 50 LOC. Same thing with tls is just three more lines.
They build standalone, so it's easier to copy them directly to start your own project; they are CC0 licensed (public domain) to facilitate that.
Windows binary builds
32- and 64-bit Windows binary builds are available via Appveyor. Visit lws on Appveyor,
click on a build, the ARTIFACTS, and unzip the zip file at C:\Program Files (x86)/libwebsockets
.
ESP32 is supported
ESP32 is now supported in lws! Download the
- factory https://warmcat.com/git/lws-esp32-factory/ and
- test server app https://warmcat.com/git/lws-esp32-test-server-demos
The ESP32 stuff has my dynamic mbedtls buffer allocation patches applied, which reduce allocation for small payload TLS links by around 26KiB per connection.
Support
This is the libwebsockets C library for lightweight websocket clients and servers. For support, visit
and consider joining the project mailing list at
https://libwebsockets.org/mailman/listinfo/libwebsockets
You can get the latest version of the library from git:
Doxygen API docs for master: https://libwebsockets.org/lws-api-doc-master/html/index.html