Comments (3)
#4145 is a proposal for how the SendDatagram
will look like with context.
from quic-go.
How do other datagram APIs deal with this? For example, WebTransport has an API to send datagrams. They must be running into the same issue.
One option would be to return a ErrDatagramTooLarge
error. However, one reason for the bad datagram performance we're currently suffering from (#3766) is that every call to SendDatagram
waits until the datagram has been packaged. The fix for that seems easy: just have a queue of datagrams, allowing more datagrams to be queued, so we can efficiently send them out. However, this also means that we won't be able to return a separate error per call to SendDatagram
.
from quic-go.
Looking at https://www.w3.org/TR/webtransport/#example-fixed-rate, WebTransport API provides an option for the caller to wait till the transport is ready. Perhaps SendDatagram
can return an error channel of size 1 if we move to a queue of datagrams. That way the caller can decide if they want to wait for the feedback.
However, I think improving performance can be tackle separately. In the meantime to prevent large datagrams from blocking the queue, we can:
- Reject datagrams larger than current MTU. MTU is unlikely to increase in the near future
- For datagrams size less than MTU but larger than the remaining size of the QUIC packet, drop it if it cannot be sent after a few retries
from quic-go.
Related Issues (20)
- Path MTU Discovery is highly affected by packet loss HOT 5
- The method `ListenAndServe` in package `http3` is not compatible with `http` HOT 4
- improve WASM support
- quic-go.newStream high memory usage HOT 7
- http3: response body not implemented http3.HTTPStreamer HOT 9
- Datagram no recent network activity error HOT 3
- bug: unable to connect to quiche servers HOT 5
- In some cases I have turned off Stream on the server side, but OpenStreamSync on the client side is still blocked HOT 6
- pass a context to ConnContext context, cancel it when the connection is closed
- Slow transfer speed HOT 10
- Wrong ACK numbers? HOT 1
- gquic branch usage HOT 1
- Go 1.21
- server incorrectly allows 0-RTT with reduced limits when using tls.Config.GetConfigForClient
- introduce a minimum step size of Path MTU Discovery
- Allow applications to specify MaxPacketBufferSize HOT 8
- add more metrics
- Significant Packet Delay with quic-go on iOS Due to Goroutine Handling HOT 3
- http3: RoundTripper is caching dialErr since v0.43.0 HOT 1
- Cancel retransmission of data when sending with quic Client HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from quic-go.