tink_http icon indicating copy to clipboard operation
tink_http copied to clipboard

PhpClient should be wrapped in workers

Open kevinresol opened this issue 9 years ago • 6 comments

I just realized that I have forgotten that bit.

kevinresol avatar Oct 08 '16 02:10 kevinresol

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)

kevinresol avatar Dec 06 '16 14:12 kevinresol

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.

back2dos avatar Dec 06 '16 15:12 back2dos

Did I miss something? I thought the http request a sync operation. How does that parallelize?

kevinresol avatar Dec 06 '16 15:12 kevinresol

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.

back2dos avatar Dec 06 '16 15:12 back2dos

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

kevinresol avatar Dec 06 '16 15:12 kevinresol

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

benmerckx avatar Dec 06 '16 16:12 benmerckx