-
-
Notifications
You must be signed in to change notification settings - Fork 169
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
quic transport #3376
Comments
|
It gets worse since we also need to run the GTK main loop until we can drop GTK (#1995). And perhaps soon in pygobject directly: Implement asyncio event loop based on glib Next, creating This may help in bridging with the rest of the code: |
I've done some testing with Aioquic. Basically I've just glued asyncio with aioquic to the existing codebase. The source of aioquic seems pretty neat. I think the best way forward is to use this code as an example to implement our own low-level implementation of a http/3 quic server. |
Yes! |
try to build on every RPM platform and see what happens
We need an asyncio event loop: The patches for pygobject are still languishing as a PR and asyncio-glib is unmaintained. And gbulb has had no update since earlier this year. Then there's also glibcoro: glibcoro makes the Meanwhile, this answer: https://stackoverflow.com/a/26719999/428751 suggests running the aio part in a separate thread. Downside is: One does need to be careful, however, to use thread-safe functions to communicate between the GUI (main) thread and the asyncio thread. This means using loop.call_soon_threadsafe or asyncio.run_coroutine_threadsafe to submit things to asyncio from GTK, and GLib.idle_add to submit things to GTK from asyncio. Decisions! |
There's still a lot to do:
xpra start --no-daemon -d quic --start=xterm
--bind-tcp=0.0.0.0:10000
--bind-quic=localhost:20000 --ssl-cert=./cert.pem --ssl-key=./key.pem Allows http3 clients to connect: ./examples/http3_client.py "https://localhost:20000/Sessions?hello=foo&bar=2" -k -v --output-dir=./output Apparently, chrome needs to be told to use the QUIC protocol |
move common connection bits between client and server to a XpraWebSocketConnection class
As of d4c7fc8, I can connect via xpra start --bind-quic=localhost:20000 --start=xterm :100 \
--ssl-cert=./cert.pem --ssl-key=./key.pem xpra attach quic://localhost:20000/ --ssl-server-verify-mode=none |
warn if 'uvloop' is not found since it should now be available on all the platforms it can be installed on (ie: all except MS Windows)
Looks like asyncio integration with support to await Gio async functions is going to be merged! |
Looks like |
WebTransport can now be used with the html5 client: |
sending a websocket close message to other types of connections is unlikely to work
with aioquic 1.2, we can provide the QuicErrorCode and reason, and the protocol implementations can send more specific messages before that, WebSocket and WebTransport protocols have 'close' frames too
TLDR excerpts from the QUIC is not Quick Enough over Fast Internet paper:
Fast internet is defined as >500 Mbps |
QUIC could easily replace the old UDP transport.
There are frameworks and APIs that wrap QUIC with easy to use callbacks, like https://github.com/aiortc/aioquic documentation
(see also https://github.com/MagicStack/uvloop)
We would get HTTP/3 and encryption almost for free and a reliable event based framework for managing connection state.
Examples include an http3 server and clients, etc..
The re-send / packet-drop callbacks could easily re-use the techniques that were used for UDP (#639) which was removed in 2022238.
Worth noting that aioquic requires Python 3.7 or better, and the OpenSSL development headers so this won't be available on RHEL 8.
The text was updated successfully, but these errors were encountered: