Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Building real time applications with Symfony2

2,920 views

Published on

Real time applications are here and users expecting that Real time data is part of UX. What are your options for building RTA with Symfony2/PHP? Slides from Symfony Camp Ukraine.

Published in: Technology
  • Be the first to comment

Building real time applications with Symfony2

  1. 1. Building Real-Time Apps With Symfony2 Antonio Perić-Mažar, Locastic 24.10.2015 Symfony Camp Ukraine
  2. 2. @antonioperic About me • Antonio Perić-Mažar, 
 mag. ing. comp. • CEO @ Locastic • Software developer, Symfony2 • Sylius Contributor :)
 • www.locastic.com • antonio@locastic.com • twitter: @antonioperic
  3. 3. @antonioperic Who we are? • Locastic (www.locastic.com) • Web and mobile development • UI/UX design • Located in Split, Croatia
  4. 4. @antonioperic
  5. 5. @antonioperic What is RTA? A real-time application (RTA) is an application program that functions within a time frame that the user senses as immediate or current. The latency must be less than a defined value, usually measured in seconds. Whether or not a given application qualifies as an RTA depends on the worst-case execution time (WCET), the maximum length of time a defined task or set of tasks requires on a given hardware platform. The use of RTAs is called real-time computing (RTC).
  6. 6. @antonioperic
  7. 7. @antonioperic Use Cases • Videoconference applications, VoIP • Data Visualisations, Location tracking • Online gaming, multi-user collaboration • Community storage solutions • Some e-commerce transactions • Chatting, IM (instant messaging) • Notifications & Signalling • Activity Streams • …
  8. 8. @antonioperic Use Cases Real-Time == UX etc.
  9. 9. @antonioperic Understanding RTA • History of Realtime • LiveConnect • Http Based solutions • Comet
  10. 10. @antonioperic HTTP • A client requests a webpage from a server. • The server calculates the response • The server sends the response to the client.
  11. 11. @antonioperic Webhooks •server only •low update rates  •uni-directional - from publisher to consumer (server to server) •avg. latency •high. efficiency (for servers)
  12. 12. @antonioperic Polling
  13. 13. @antonioperic Polling • A client requests a webpage from a server using regular HTTP (see HTTP above). • The requested webpage executes JavaScript which requests a file from the server at regular intervals (e.g. 0.5 seconds). • The server calculates each response and sends it back, just like normal HTTP traffic.
  14. 14. @antonioperic Polling • server or client • low update rates • batched bi-directional • high latency • low efficiency
  15. 15. @antonioperic Long Polling
  16. 16. @antonioperic Long Polling • A client requests a webpage from a server using regular HTTP (see HTTP above). • The requested webpage executes JavaScript which requests a file from the server. • The server does not immediately respond with the requested information but waits until there's new information available. • When there's new information available, the server responds with the new information. • The client receives the new information and immediately sends another request to the server, re-starting the process.
  17. 17. @antonioperic Long Polling • server or client • avg. update rates • batched bi-directional • avg. latency • avg. efficiency
  18. 18. @antonioperic HTML5 Server Sent Events (SSE) / EventSource
  19. 19. @antonioperic HTML5 Server Sent Events (SSE) / EventSource • A client requests a webpage from a server using regular HTTP • The requested webpage executes javascript which opens a connection to the server. • The server sends an event to the client when there's new information available. • Real-time traffic from server to client, mostly that's what you'll need • You'll want to use a server that has an event loop • Not possible to connect with a server from another domain
  20. 20. @antonioperic HTML5 Server Sent Events (SSE) / EventSource • client (pushing) • good update rates • unidirectional • good latency • good efficiency
  21. 21. @antonioperic WebSockets
  22. 22. @antonioperic WebSockets • A client requests a webpage from a server using regular http (see HTTP above). • The requested webpage executes JavaScript which opens a connection with the server. • The server and the client can now send each other messages when new data (on either side) is available. • Real-time traffic from the server to the client and from the client to the server • You'll want to use a server that has an event • With WebSockets it is possible to connect with a server from another domain. • It is also possible to use a third party hosted websocket server, for example Pusher or others. This way you'll only have to implement the client side, which is very easy!
  23. 23. @antonioperic WebSockets • TCP, fully duplex single connection • server or client (client mostly) • bi-directional • high update rates • low latency • high efficiency
  24. 24. @antonioperic Streaming • make connection, keep it open, as soon as we have updates push it to client • server or client • high updated rates • uni-directional • low latency • high efficiency • business decisions, trading, unidirectional you can only push it from server to client, single persisting connection  • look as servers and event as standard
  25. 25. @antonioperic WebRTC • server or client (normally client2client) • high update rates • bi-directional • low latency • high efficiency • audio or video generally peer2peer
  26. 26. @antonioperic Communication patterns • Simple messaging • Pub/Sub • RPC/RMI • Data Sync
  27. 27. @antonioperic Simple Messaging • No abstraction. Just messages • Fits well with HTTP and REST • Many persist connections
  28. 28. @antonioperic Pub/Sub • Subscribe and publish on channels • Multiplexed. Single connection. • Clearity partitions complex data • Dedicated Endpoint • Required SDK
  29. 29. @antonioperic RPC/RMI • Call API Methods • SDK Required • Hides network activity from developer
  30. 30. @antonioperic Data Sync • Interact with, and synchronise, data structures • Dedicated endpoint + Protocol • New Paradigm • SDK Required • Hides network activity from developer
  31. 31. @antonioperic How to pick technology? • First: Are the only real time solutions in NodeJS?
  32. 32. @antonioperic How to pick technology? • First: Are the only real time solutions in NodeJS?
 
 
 NO!
  33. 33. @antonioperic Solutions by language • PHP: ReactPHP, Ratchet, dNode-php, phpDaemon • Java: Netty, Jetty • JavaScript (Node.JS): Faye, Socket.IO (Engine.IO), Primus.io • .NET (C#): SignalR, XSockets • Python: Lots of options built on Tornado • Ruby: em-websocket, Faye • Language agnostic: most hosted services
  34. 34. @antonioperic Solutions by language j.mp/realtime-tech-guide
  35. 35. @antonioperic PHP? • Apache is not built for Real-Time • PHP is not build for Real-Time • Real-Time is not impossible with PHP
  36. 36. @antonioperic PHP RTA • Self hosted PHP solution • Self hosted Side-by-Side solution • Hosted solution
  37. 37. @antonioperic Self hosted PHP • tightly coupled • two stacks: • sync stack • async stack
  38. 38. @antonioperic
  39. 39. @antonioperic PHP Self Hosted solutions • React (PHP) • Event-driven, non-blocking I/O with PHP. • Ratchet (Built on React PHP) • WebSockets, WAMP, PubSub samples. No HTTP Fallback • dnode-php (RPC/RMI) • phpDaemon • Lots of examples. Most docs in Russian.
  40. 40. @antonioperic
  41. 41. @antonioperic PHP Self Hosted solutions Pros: • PHP • Simple integration • Standards-based • WAMP/Autobahn • JS, Android, iOS & more Cons: • No HTTP fallback • Low-level abstractions • Different programming style • You need to scale
  42. 42. @antonioperic
  43. 43. @antonioperic PHP + Faye Self Hosted solutions Pros: • PubSub • Connection fallback • Redis support is build in • Simple integration Cons: • Not PHP? • You need to scale
  44. 44. @antonioperic Other side by side solutions • Socket.IO • SockJS • SignalR • see real time tech guide for more
  45. 45. @antonioperic
  46. 46. @antonioperic PHP + Hosted solutions Pros: • Simple and powerful • Instantly scalable • Managed & Dedicated • Direct integration into Symfony Cons: • 3rd party reliance
  47. 47. @antonioperic What we build? • Real time dashboards ford Google Adwords analytics • Symfony2, AngularJS, RabbitMQ • First version was with Polling • Second version moving to hosted solution - Pusher
  48. 48. @antonioperic Other hosted solutions • PubNub • Realtime.co • Firebase • Simperium • see real time tech guide for more
  49. 49. @antonioperic References • Phil @Leggetter 
 - Head of Developer Relations at @pusher. Realtime Web Technology Evangelist.
 • Real-time Tech Guide • React (PHP) • Ratchet (PHP) • Faye (Node/Ruby) • Pusher • LopiPusherBundle • github.com/leggetter/realtime-symfonyexamples
  50. 50. @antonioperic Thank you!
  51. 51. @antonioperic QA
 
 
 follow me on twitter: @antonioperic

×