Comments (10)
This is expected, I haven't finished work on #3 so transfer will stop after exactly 1MB:
Line 300 in be5c99a
from aioquic.
Ok sure. I did not see that. Can you please let me know if you have any approximate time frame around which you will be able to complete it.
It is required for the project that I am currently working on, and I will be really thankful if this can be implemented. Also, if this is not in your immediate pipeline, can you let me know any workaround which I can use.
I tried testing it with a file size of approx 300 KB, but still I am getting the same issue.
from aioquic.
Sorry but I don't have a set schedule, this is really a "best effort" mode project. At this stage, I wouldn't depend on aioquic for any critical project unless you're willing to hack on it yourself.
from aioquic.
MAX_DATA and MAX_STREAM_DATA now get raised as needed
from aioquic.
Hi, I pulled your commit. I don't think the issue is with the max data or max stream data.. The server is unable to serve any request which is larger that around 120 KB. I modified the connection.py to check the packet number during the decryption
if not crypto.recv.is_valid():
continue
try:
plain_header, plain_payload, packet_number = crypto.decrypt_packet(
data[start_off:end_off], encrypted_off, space.expected_packet_number
)
print (packet_number),
and what I see is, the transmission stops after it reaches 96 or 97. I have tried it with multiple different ways and I observe the same everytime.
Also, I am not using aioquic for any critical project, so I don't mind hacking the code myself, if you can assist in where might be problem be.
Thanks.
from aioquic.
There are two issues here, both of which are mentioned in #3 :
-
on the receiver side there was a hard limit imposed by MAX_DATA and MAX_STREAM_DATA, which were never raised. This is now fixed.
-
on the sender side, congestion control and loss recovery are not implemented. This means the sender immediately tries to send all the data it has, which is bound to fail for anything except a trivial amount of data. I also see a limit at around 120kB
Here is a super-crude patch which improves things, but it's definitely not a fix!
--- a/aioquic/connection.py
+++ b/aioquic/connection.py
@@ -1646,7 +1646,8 @@ class QuicConnection(asyncio.DatagramProtocol):
is_one_rtt = self.__epoch == tls.Epoch.ONE_RTT
buf = builder.buffer
- while True:
+ packets = 0
+ while packets < 50:
# write header
builder.start_packet(packet_type, crypto)
@@ -1742,6 +1743,7 @@ class QuicConnection(asyncio.DatagramProtocol):
if not builder.end_packet():
break
+ packets += 1
def _write_handshake(self, builder: QuicPacketBuilder, epoch: tls.Epoch) -> None:
crypto = self.cryptos[epoch]
from aioquic.
Hi, I understand now. I tried to pull the latest code and modified the code according to this patch. It is still at around 120 kB.
I guess the limit will only improve once congestion control is in place. Thank you for your help.
from aioquic.
Give it another try with the latest code. There is still no congestion control so there is huge packet loss, but it should no longer deadlock.
from aioquic.
@massvoice in my experience congestion control is working decently, I'm able to transfer a 50MB file over WiFi.
from aioquic.
Hi, Yes I too checked it. It is working really well. Thank you for the implementation.
from aioquic.
Related Issues (20)
- aioquic 0.9.22 dosent have your latest code changes and commits HOT 1
- HTTP/3 Datagram terminology is out of sync with RFC9297 HOT 7
- HTTP3 upload too slow HOT 2
- pip install -e . error HOT 1
- FINs are swallowed if data is fully ACKed
- How to use QUIC in video streaming?
- Do not leave stray file after test_packet.py is run HOT 1
- Any async delay operation while an aioquic.client object exists makes it silently fail HOT 8
- Improve `asyncio` layer docs regarding `transmit()`
- `QuicStreamAdapter` should implement more methods of `BaseTransport` HOT 2
- What's the expected behavior if the server restarts and receives living client's frame? HOT 1
- only support IPv6 socket? HOT 1
- Which versions are supported by aioquic?
- HTTP/3 headers need further validation HOT 1
- Idle timeout should be a small value between local idle timeout and remote max idle timeout from transport parameters HOT 1
- Providing callable to create_protocol results in AttributeError HOT 2
- server unable to decrpt ACK packet
- Add HTTP/2 Alt-Svc feature to HTTP3 Server/Client examples HOT 6
- Specifying cafile loads the CA file in addition to certifi and not instead of certifi HOT 4
- Support SO_REUSEPORT 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 aioquic.