Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Building real time applications with Symfony2

Building real time applications with Symfony2

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.

29db221e8a59b06c9180725ec8ac1e75?s=128

Antonio Peric-Mazar

October 29, 2015
Tweet

More Decks by Antonio Peric-Mazar

Other Decks in Programming

Transcript

  1. Building Real-Time Apps With Symfony2 Antonio Perić-Mažar, Locastic 24.10.2015 Symfony

    Camp Ukraine
  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. @antonioperic Who we are? • Locastic (www.locastic.com) • Web and

    mobile development • UI/UX design • Located in Split, Croatia
  4. @antonioperic

  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. @antonioperic

  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. @antonioperic Use Cases Real-Time == UX etc.

  9. @antonioperic Understanding RTA • History of Realtime • LiveConnect •

    Http Based solutions • Comet
  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. @antonioperic Webhooks •server only •low update rates •uni-directional - from

    publisher to consumer (server to server) •avg. latency •high. efficiency (for servers)
  12. @antonioperic Polling

  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. @antonioperic Polling • server or client • low update rates

    • batched bi-directional • high latency • low efficiency
  15. @antonioperic Long Polling

  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. @antonioperic Long Polling • server or client • avg. update

    rates • batched bi-directional • avg. latency • avg. efficiency
  18. @antonioperic HTML5 Server Sent Events (SSE) / EventSource

  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. @antonioperic HTML5 Server Sent Events (SSE) / EventSource • client

    (pushing) • good update rates • unidirectional • good latency • good efficiency
  21. @antonioperic WebSockets

  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. @antonioperic WebSockets • TCP, fully duplex single connection • server

    or client (client mostly) • bi-directional • high update rates • low latency • high efficiency
  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. @antonioperic WebRTC • server or client (normally client2client) • high

    update rates • bi-directional • low latency • high efficiency • audio or video generally peer2peer
  26. @antonioperic Communication patterns • Simple messaging • Pub/Sub • RPC/RMI

    • Data Sync
  27. @antonioperic Simple Messaging • No abstraction. Just messages • Fits

    well with HTTP and REST • Many persist connections
  28. @antonioperic Pub/Sub • Subscribe and publish on channels • Multiplexed.

    Single connection. • Clearity partitions complex data • Dedicated Endpoint • Required SDK
  29. @antonioperic RPC/RMI • Call API Methods • SDK Required •

    Hides network activity from developer
  30. @antonioperic Data Sync • Interact with, and synchronise, data structures

    • Dedicated endpoint + Protocol • New Paradigm • SDK Required • Hides network activity from developer
  31. @antonioperic How to pick technology? • First: Are the only

    real time solutions in NodeJS?
  32. @antonioperic How to pick technology? • First: Are the only

    real time solutions in NodeJS?
 
 
 NO!
  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. @antonioperic Solutions by language j.mp/realtime-tech-guide

  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. @antonioperic PHP RTA • Self hosted PHP solution • Self

    hosted Side-by-Side solution • Hosted solution
  37. @antonioperic Self hosted PHP • tightly coupled • two stacks:

    • sync stack • async stack
  38. @antonioperic

  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. @antonioperic

  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. @antonioperic

  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. @antonioperic Other side by side solutions • Socket.IO • SockJS

    • SignalR • see real time tech guide for more
  45. @antonioperic

  46. @antonioperic PHP + Hosted solutions Pros: • Simple and powerful

    • Instantly scalable • Managed & Dedicated • Direct integration into Symfony Cons: • 3rd party reliance
  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. @antonioperic Other hosted solutions • PubNub • Realtime.co • Firebase

    • Simperium • see real time tech guide for more
  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. @antonioperic Thank you!

  51. @antonioperic QA
 
 
 follow me on twitter: @antonioperic