Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Reactive PHP Events
Search
Christopher Pitt
April 20, 2015
Programming
1
340
Reactive PHP Events
Event loops in PHP.
Christopher Pitt
April 20, 2015
Tweet
Share
More Decks by Christopher Pitt
See All by Christopher Pitt
Making Robots (PHP Unicorn Conf)
chrispitt
1
130
Transforming Magento (NomadMage 2017)
chrispitt
2
72
Forget What You Know
chrispitt
1
120
Monads In PHP → php[tek]
chrispitt
3
410
Breaking The Enigma → php[tek]
chrispitt
0
120
Turn on the Generator!
chrispitt
0
140
Implementing Languages (FluentConf)
chrispitt
1
300
Async PHP (Sunshine)
chrispitt
0
380
Helpful Robot
chrispitt
0
87
Other Decks in Programming
See All in Programming
PostmanでAPIの動作確認が楽になった話
h455h1
0
160
Rails と人魚の話/rails-and-mermaid
sanfrecce_osaka
0
100
PHP8.3の機能を振り返る / Review of PHP 8.3 features
seike460
PRO
1
110
使ってみよう Azure AI Document Intelligence
kosmosebi
2
290
⼤規模⾔語モデルの拡張(RAG)が 終わったかも知れない件について
nearme_tech
23
15k
ONE WEDGE_company_guide
1wedge_one
0
460
StoreKit2によるiOSのアプリ内課金のリニューアル
kangnux
0
110
DMMプラットフォームがTiDB Cloudを採用した背景
pospome
8
4k
単体テストを書かない技術 #phpcon_odawara
o0h
PRO
26
8.2k
PHPはいつから死んでいるかの調査
chiroruxx
1
380
大規模Reactアプリのリアーキテクチャ~8万行のTanStack Query移行の軌跡~
kj455
4
940
#phpcon_odawara オープン・クローズドなテストフィクスチャを求めて / open closed test fixtures
77web
3
230
Featured
See All Featured
Designing on Purpose - Digital PM Summit 2013
jponch
110
6.5k
Designing for humans not robots
tammielis
248
25k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
25
2.3k
Intergalactic Javascript Robots from Outer Space
tanoku
266
26k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
17
1.4k
jQuery: Nuts, Bolts and Bling
dougneiner
59
7.1k
Facilitating Awesome Meetings
lara
42
5.6k
YesSQL, Process and Tooling at Scale
rocio
164
13k
Clear Off the Table
cherdarchuk
84
310k
Build your cross-platform service in a week with App Engine
jlugia
225
17k
Into the Great Unknown - MozCon
thekraken
10
990
Typedesign – Prime Four
hannesfritz
36
2.1k
Transcript
Reactive Events
You can do awesome things in PHP
$(".button").click(function() { $(".alert").show() .find(".label").html("You clicked a thing!"); });
var buttons = document.querySelectorAll(".button"); buttons.forEach(function(button) { button.addEventListener("click", function(event) { button.style.visibility
= "visible"; var label = document.querySelector(".button .label"); label.innerHTML = "You clicked a thing!"; }); });
Questions?
This works because of the... event loop
And now for something completely different
This works because... Apache
And then mod_php takes over...
So, NodeJS then?
var http = require("http"); http.createServer(function (request, response) { response.writeHead(200, {"Content-Type":
"text/plain"}); response.end("Hello World"); }) http.listen(1337, "127.0.0.1");
NodeJS takes on the roles of web server and request
processor!
var filesystem = require("fs"); filesystem.readFile("/etc/passwd", function (error, data) { if
(error) { throw err; } console.log(data); });
ReactPHP
Now we can do that NodeJS thing in PHP
PHP also has closures
Trouble is... NodeJS libraries are designed to be non-blocking
PHP is still mostly blocking
We can fix this in a few ways...
We can evolve PHP to have lots of non-blocking code
in core
We can develop patterns and libraries for parallel execution
Asynchronous vs. Parallel Fight!
None
None
None
NodeJS is asynchronous but not parallel
WAT then?!
Queues
Queues are one-way
Queues are weak
GIEF STREGNTH!
https://github.com/asyncphp/remit
Starts with events...
then adds queues...
Voilà!
$server = new AsyncPHP\Remit\Adapter\ZeroMQ\Server( // some boring guff ); $server->addListener("tick",
function ($event, $i) { print "TICK {$i}\n"; }); $server->addListener("done", function ($event) { print "DONE\n"; }); $loop->run();
$client = new AsyncPHP\Remit\Adapter\ZeroMQ\Client( // some more boring guff );
foreach (range(1, 5) as $i) { $loop->addTimer($i, function () use ($client, $i) { $client->emit("tick", $i); }); } $loop->addTimer(6, function () use ($client) { $client->emit("done"); }); $loop->run();
Distributed, non-blocking events for bi-directional communication with message queue workers
Reactive PHP events