tink_http
tink_http copied to clipboard
PhpClient should be wrapped in workers
I just realized that I have forgotten that bit.
I am not sure if this really works. Because php doesn't support threads at all. (even pthread is not really what we needed, because it doesn't share references)
Threads are not a requirement though. The runloop could still make progress two downloads in parallel, so long as each of them is performed bit by bit.
Did I miss something? I thought the http request a sync operation. How does that parallelize?
Well, in theory the pipes drive the sources which each read a (possibly empty) slice through a worker which hands control back to the runloop, which then schedules the next worker to progress. The IO occurs in parallel anyway (since the kernel with its TCP stack and also the server on the other end progress independently). The trick is not to block until all data is read, but just read it bit by bit. And ideally not to block if no data exists, but just yield Progress.NONE so that other operations may check their status.
Oh that means need to find out the "bit by bit" api in php. But I have no idea atm.
Or maybe just replace readAll with something else here: https://github.com/haxetink/tink_http/blob/21ac733/src/tink/http/Client.hx#L160
I created a non-blocking tink_tcp connection for php based on stream_select which might make it easier to accomplish this if read bit by bit. But it also created a mess in the source hence my comment https://github.com/haxetink/tink_tcp/issues/5