1
0
mirror of https://github.com/danog/byte-stream.git synced 2024-11-26 20:04:51 +01:00
Commit Graph

120 Commits

Author SHA1 Message Date
Niklas Keller
b420ae4d6b Solve performance issues with very large chunks
Very large chunks need to be copied every time there's a partial write, which is pretty problematic. Instead of doing an almost full copy of the full chunk every time, this patch splits very large chunks into multiple smaller chunks automatically.

Fixes #41.
2018-05-23 19:39:34 +02:00
Aaron Piotrowski
24b2530ec7
Remove exception overwrite
Copy/paste oversight.
2018-04-05 09:44:39 -05:00
Aaron Piotrowski
da357d1579
Proper fix for remote closed streams
Fixes #40. Streams on MacOS (and possibly FreeBSD) that are closed by the remote still allow writing, returning a non-zero from fwrite(). EOF then is false, since data was written to the buffer. EOF needed to be checked before calling fwrite().
2018-04-03 19:08:18 -05:00
Aaron Piotrowski
33a74dfecd
Fix closed streams that continually report as writable 2018-04-03 11:57:25 -05:00
Niklas Keller
56e814943a Add tests for dead socket detection
Relates to #40.
2018-04-03 18:20:40 +02:00
Aaron Piotrowski
6bd0be750d Add Payload
Similar to Message, but does not implement Promise to avoid all the issues that are associated with that.
2018-03-13 09:53:18 -05:00
Niklas Keller
9f60974881 Fix resource input streams
The read watcher needs to be disabled now, because immediate reads will process the next immediate read now in the next tick.

Fixes #38.
2018-03-11 10:19:43 +01:00
Niklas Keller
062f16d0c5 Defer immediate reads
Immediate reads have been introduced to support in-memory streams and STDIN on Windows, but this causes problems during piping of streams that always have data available, because it blocks everything else. This is resolved by deferring the promise resolution to the next tick.
2018-03-09 17:40:36 +01:00
Niklas Keller
a4739c8a6d Attempt direct read on ResourceInputStream::read()
This change should resolve the low performance on Windows' STDIN. STDIN
on Windows is a file handle and Windows has specialized support built
into it's stream_select implementation, but a stream_select with a file
handle takes 100ms, which results in slow performance if we read in
smaller chunks and always have to wait 100ms between these.

Fixes amphp/socket#52.
2018-03-08 11:38:16 +01:00
Aaron Piotrowski
11da27c603
Only throw if resource closed or at eof 2018-02-09 00:47:09 -06:00
Niklas Keller
2cb8005742 Throw correct exception in ResourceOutputStream after close
Fixes #35.
2018-02-07 13:49:07 +01:00
Niklas Keller
1b0b8daed4 Polyfill STDOUT and STDERR on SAPIs not being CLI
STDERR is used by amphp/parallel for error forwarding from children. STDERR gets written to the error log in case of Apache and similar locations for other SAPIs.

This also ensures STDOUT / STDERR can always be used and only a single stream ID exists for STDOUT / STDERR, which might otherwise error for libuv if people open 'php://stderr' multiple times.

Fixes amphp/parallel-functions#6.
Fixes amphp/parallel#34.
2018-01-12 20:43:00 +01:00
Niklas Keller
0b6d99b2c3 Remove outdated note about closing ResourceInputStreams 2017-12-27 20:13:24 +01:00
Niklas Keller
5dffe33692 Throw correct PendingReadError for IteratorStream 2017-12-22 09:31:37 +01:00
Niklas Keller
0c059ba0e6 Suppress errors also for stream_socket_shutdown, relates to #32 2017-12-10 17:40:58 +01:00
Niklas Keller
c5e31aa7b7 Fix #32: Suppress errors for feof, because pthreads 2017-12-10 17:36:05 +01:00
Niklas Keller
3c24903849 Use fread() for STDIO instead of stream_get_contents()
Turns out this fixes the issues with amphp/parallel on Windows.
2017-12-05 19:57:30 +01:00
Sébastien Nikolaou
48bb2ebf78 Extract OutputBuffer class 2017-10-17 21:24:21 +02:00
Sébastien Nikolaou
a4a132c056 Remove error suppressions for deflate_add 2017-10-17 21:24:21 +02:00
Sébastien Nikolaou
4e0e9a6b66 Increase test coverage 2017-10-17 21:24:21 +02:00
Niklas Keller
f63b98990e Optimize memory consumption of Amp\ByteStream\pipe 2017-10-17 09:22:17 +02:00
Bob Weinand
0f501deb7c Fix #29 - do not release resource on __destruct()
This ensures getResource() still returning a valid resource during cyclic garbage collection
2017-10-17 03:50:40 +02:00
Niklas Keller
d60ba033c4 Use stream_get_contents instead of fread for ResourceInputStream
This fixes an issue with TLS streams: https://github.com/amphp/artax/issues/138.

We still use  for UDP, because stream_get_contents might read multiple packages there if I'm not mistaken.
2017-10-08 12:38:01 +02:00
Niklas Keller
af613a0a77 Fix Message::read() if stream fails with a pending read 2017-10-07 10:28:45 +02:00
Fabien Villepinte
0dff1fe859 Anonymous function has an unused use $resource 2017-10-01 12:04:51 +02:00
Aaron Piotrowski
fdcf400f19
Check writable flag rather than for null resource
Also null resource when writing in watcher callback fails. Fixes #20.
2017-09-15 00:17:42 -05:00
Bob Weinand
a70a650793 Also \assert() against fclose() instead of silently returning null 2017-07-15 10:38:47 +02:00
Bob Weinand
666ece18a4 Fix invalid StreamException upon full write buffer
And add a few tests with chunk size writes
2017-07-15 10:06:12 +02:00
Niklas Keller
4777508637 Fail streaming messages correctly on read failures
Fixes #18.
2017-06-28 11:35:12 +02:00
Niklas Keller
704adf70cf Add reference and unreference methods to ResourceInputStream 2017-06-23 16:33:13 +02:00
Niklas Keller
b67358ad91 Suppress errors on close for resource streams
A resource might still be non-null, but already closed.
2017-06-19 08:43:07 +02:00
Aaron Piotrowski
48c4e122d8
Tweak closing
Resource is not nulled in watcher callback if reading/writing fails so close() will still call shutdown/fclose.
2017-06-18 23:14:59 -05:00
Niklas Keller
8d74c85048 Apply same closing mechanism to RIS 2017-06-18 23:25:22 +02:00
Niklas Keller
798723e942 Use \fclose for unidirectional resources to cover pipes 2017-06-18 22:57:19 +02:00
Niklas Keller
93540890fd Remove unnecessary isset check for stream modes 2017-06-18 22:55:44 +02:00
Niklas Keller
161c73471d stream_socket_shutdown resources in ROS on close 2017-06-18 20:16:05 +02:00
Aaron Piotrowski
816307c665 Fix writing in watcher callback if $chunkSize is null 2017-06-18 11:47:58 -05:00
Niklas Keller
8b20bf90b8 Fix feof check 2017-06-17 17:46:18 +02:00
Niklas Keller
0071609904 Fix minor phpdoc issue 2017-06-17 17:10:23 +02:00
Aaron Piotrowski
7a8d6d5f1f Remove Parser
Moved to a separate repository at amphp/parser.
2017-06-07 22:23:44 -05:00
Niklas Keller
6eb83c1218 Make Parser methods instead of class final 2017-06-05 14:54:51 +02:00
Niklas Keller
06715d6387 Revert "Fixup 7543f30fd66e41315677e1800082ba8b79f60b4c"
This reverts commit 751b757ae2.
2017-06-05 13:39:07 +02:00
Niklas Keller
751b757ae2 Fixup 7543f30fd6 2017-06-05 13:36:29 +02:00
Niklas Keller
c87c0cca98 Remove wrong return type from Parser::push 2017-06-04 11:41:44 +02:00
Niklas Keller
51265e4ece Remove OutputStream from Parser, make it not implementing the interface 2017-06-04 11:40:15 +02:00
Aaron Piotrowski
7543f30fd6 Do not include delimiter in sent string 2017-06-01 00:08:18 -05:00
Aaron Piotrowski
b5d2a8d434 Do not send remaining buffer on end 2017-05-31 23:51:44 -05:00
Aaron Piotrowski
06fc788d32 Revert "Add Parser::getBuffer()"
This reverts commit 253aaaf4fa.
2017-05-29 23:29:19 -05:00
Niklas Keller
ea135f26d0 Fix chunk size issue in ResourceOutputStream, fixes #14 2017-05-29 17:34:29 +02:00
Niklas Keller
2ecbf8aa8b Respect chunk size for ResourceOutputStream, document resource streams 2017-05-25 18:12:12 +02:00