-
Notifications
You must be signed in to change notification settings - Fork 102
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Rebuild into async only with sync API #147
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
WyriHaximus
force-pushed
the
rebuild-into-async-only
branch
5 times, most recently
from
February 2, 2024 14:37
67ab6a6
to
c7e3abe
Compare
WyriHaximus
force-pushed
the
rebuild-into-async-only
branch
2 times, most recently
from
February 16, 2024 19:24
74f5609
to
50b95aa
Compare
WyriHaximus
force-pushed
the
rebuild-into-async-only
branch
15 times, most recently
from
March 10, 2024 20:21
f468186
to
3db5748
Compare
WyriHaximus
force-pushed
the
rebuild-into-async-only
branch
2 times, most recently
from
March 20, 2024 21:48
13b1999
to
2a27865
Compare
WyriHaximus
force-pushed
the
rebuild-into-async-only
branch
5 times, most recently
from
April 12, 2024 05:49
eb219ce
to
520d24f
Compare
WyriHaximus
force-pushed
the
rebuild-into-async-only
branch
3 times, most recently
from
April 19, 2024 06:08
ebddb44
to
11efa3f
Compare
WyriHaximus
force-pushed
the
rebuild-into-async-only
branch
6 times, most recently
from
April 26, 2024 16:13
73d9b8d
to
249867c
Compare
WyriHaximus
changed the title
[WIP] Rebuild into async only with sync API
Rebuild into async only with sync API
Apr 26, 2024
WyriHaximus
force-pushed
the
rebuild-into-async-only
branch
2 times, most recently
from
May 5, 2024 21:15
28c8c28
to
e50f6f7
Compare
Non-Breaking Changes: * Merged clients into one * Marked `Client` and `Channel` `final` through doc block and introduced interfaces for them for unit testing * Dropped build in event loop, socket, and stream handling switching to [`react/event-loop`](https://reactphp.org/event-loop/), [`react/socket`](https://reactphp.org/socket/), and [`react/stream`](https://reactphp.org/stream/) for that * Partially introduced strict typing and (return) type hints due to all the changes in the code * Updated certain generated traits into generated classes * Ensured performance didn't regress with these changes * Updated all examples, tutorials, and the benchmark. Dropping the async variants due to the merge Breaking changes: * Raised minimum PHP version to 8.1+ unlocking the use of fibers * Swapped [`react/promise`](https://reactphp.org/promise/) v2 with v3 * Dropped Event Loop injection and replaced it with the global loop accessor ```diff <?php -use Bunny\Async\Client; +use Bunny\Client; -use React\EventLoop\Factory; require dirname(__DIR__, 2) . '/vendor/autoload.php'; -$loop = Factory::create(); -(new Client($loop))->connect(); +$client = new Client(); -$loop->run(); ``` * Merged `Async` and `Sync` clients into `Client` utilizing fibers through [`react/async`](https://reactphp.org/async/) `receive.php`: ```diff <?php use Bunny\Channel; use Bunny\Client; use Bunny\Message; require dirname(__DIR__, 2) . '/vendor/autoload.php'; -$client = (new Client())->connect(); +$client = new Client(); $channel = $client->channel(); $channel->queueDeclare('hello', false, false, false, false); echo ' [*] Waiting for messages. To exit press CTRL+C', "\n"; -$channel->run( +$channel->consume( function (Message $message, Channel $channel) { echo " [x] Received ", $message->content, "\n"; }, 'hello', '', false, true, ); ``` `send.php`: ```diff <?php use Bunny\Client; require dirname(__DIR__, 2) . '/vendor/autoload.php'; -$client = (new Client())->connect(); +$client = new Client(); $channel = $client->channel(); $channel->queueDeclare('hello', false, false, false, false); $channel->close(); $channel->publish('Hello World!', [], '', 'hello'); echo " [x] Sent 'Hello World!'\n"; $channel->close(); $client->disconnect(); ``` `receive-async.php`: ```diff <?php use Bunny\Channel; -use Bunny\Async\Client; +use Bunny\Client; use Bunny\Message; -use React\EventLoop\Factory; require dirname(__DIR__, 2) . '/vendor/autoload.php'; -$loop = Factory::create(); -(new Client($loop))->connect() +$client = new Client(); -->then(function (Client $client) { - return $client->channel(); -}) +$channel = $client->channel(); -->then(function (Channel $channel) { - return $channel->queueDeclare('hello', false, false, false, false)->then(function () use ($channel) { - return $channel; - }); -}) +$channel->queueDeclare('hello', false, false, false, false); -->then(function (Channel $channel) { - echo ' [*] Waiting for messages. To exit press CTRL+C', "\n"; - $channel->consume( - function (Message $message, Channel $channel, Client $client) { - echo " [x] Received ", $message->content, "\n"; - }, - 'hello', - '', - false, - true - ); -}); +echo ' [*] Waiting for messages. To exit press CTRL+C', "\n"; +$channel->consume( + function (Message $message, Channel $channel) { + echo " [x] Received ", $message->content, "\n"; + }, + 'hello', + '', + false, + true, +); -$loop->run(); ``` `send-async.php`: ```diff <?php -use Bunny\Channel; -use Bunny\Async\Client; +use Bunny\Client; -use React\EventLoop\Factory; require dirname(__DIR__, 2) . '/vendor/autoload.php'; -$loop = Factory::create(); -(new Client($loop))->connect() +$client = new Client(); -->then(function (Client $client) { - return $client->channel(); -}) +$channel = $client->channel(); -->then(function (Channel $channel) { - return $channel->queueDeclare('hello', false, false, false, false)->then(function () use ($channel) { - return $channel; - }); -}) +$channel->queueDeclare('hello', false, false, false, false); -->then(function (Channel $channel) { - echo " [x] Sending 'Hello World!'\n"; - return $channel->publish('Hello World!', [], '', 'hello')->then(function () use ($channel) { - return $channel; - }); -}) +$channel->publish('Hello World!', [], '', 'hello'); -->then(function (Channel $channel) { - echo " [x] Sent 'Hello World!'\n"; - $client = $channel->getClient(); - return $channel->close()->then(function () use ($client) { - return $client; - }); -}) +echo " [x] Sent 'Hello World!'\n"; +$channel->close(); -->then(function (Client $client) { - $client->disconnect(); -}); +$client->disconnect(); ``` * Channel::queueBind arguments `string $queue` and `string $exchange` switched argument locations ```diff <?php use Bunny\Channel; use Bunny\Client; use Bunny\Message; require dirname(__DIR__, 2) . '/vendor/autoload.php'; $client = new Client(); $channel = $client->channel(); $channel->exchangeDeclare('logs', 'fanout'); $queue = $channel->queueDeclare('', false, false, true, false); -$channel->queueBind($queue->queue, 'logs'); +$channel->queueBind('logs', $queue->queue); ```
WyriHaximus
force-pushed
the
rebuild-into-async-only
branch
from
May 10, 2024 09:35
e50f6f7
to
b295581
Compare
This was referenced May 19, 2024
Closed
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Non-Breaking Changes:
Client
andChannel
final
through doc block and introduced interfaces for them for unit testingreact/event-loop
,react/socket
, andreact/stream
for thatBreaking changes:
react/promise
v2 with v3Async
andSync
clients intoClient
utilizing fibers throughreact/async
Sync
receive.php
:send.php
:Async
receive-async.php
:send-async.php
:string $queue
andstring $exchange
switched argument locations