The document discusses building real-time applications with Symfony2. It begins by introducing the speaker and their company Locastic. It then defines what a real-time application is and provides examples of common use cases. The document goes on to explain various technologies that can be used to build real-time functionality, such as polling, long polling, server-sent events, websockets, and streaming. It also discusses different communication patterns and factors to consider when choosing a technology. Finally, it provides an example of a real-time dashboard that was built with Symfony2, AngularJS, and RabbitMQ and describes hosted solutions like Pusher that can be used.
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).
10. @antonioperic
HTTP
• A client requests a webpage from a server.
• The server calculates the response
• The server sends the response to the
client.
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.
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.
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
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
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
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