websockets
O que há por aí?
PHP
Marianna Teixeira
Desenvolvedora web
Comunicação em Mídias Digitais
Yuppie Tech
Vittalover
@mariannactx
OLAR!
AGENDA
» O que é websockets?
» Client-side.
» Server-side.
» Opções por aí.
» Tá, mas o que eu escolho pra começar?
1. O que é websockets?
1. O que é websockets?
1. O que é websockets?
1. O que é websockets?
two-way communication between a client running untrusted code
in a controlled environment to a remote host
the security model used for this is the origin-based
the protocol consists of an opening handshake
basic message framing
layered over TCP
not rely on opening multiple HTTP connections
2. Client-side
var connection = new WebSocket('url', [protocols]);
connection.onopen = function () {
connection.send('Ping');
};
connection.onerror = function (error) {
console.log('WebSocket Error ' + error);
};
connection.onmessage = function (e) {
console.log(e.data);
};
3. Server-side (stream)
$server = stream_socket_server($binding);
$client = stream_socket_accept($server);
stream_socket_sendto($client, $responseData);
3. Server-side (socket)
socket_create(AF_INET, SOCK_STREAM, SOL_TCP)
socket_create ( int $domain , int $type , int $protocol )
socket_set_option($this->master, SOL_SOCKET, SO_REUSEADDR, 1)
bool socket_set_option ( resource $socket , int $level , int $optname ,
mixed $optval )
socket_bind($this->master, ‘localhost’, ‘1234’)
bool socket_bind( resource $socket , string $address [, int $port ] )
socket_listen($this->master,20)
bool socket_listen ( resource $socket [, int $backlog ] )
@socket_recv($socket, $buffer, $this->maxBufferSize, 0);
int socket_recv ( resource $socket , string &$buf , int $len , int $flags
)
3. Handshake
cliente
GET /chat HTTP/1.1
Host: example.com:8000
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
servidor
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept:
s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Ratchet
socketo.me
phpws
github.com/Devristo/phpws
Brain Sockets
github.com/BrainBoxLabs/brain-
socket
4. Opções por aí
Realtime
realtime.co
Kaazing
websocket.org
nekudo
github.com/nekudo/php-
websocket
websocketd
websocketd.com
React
example.io
Pusher
pusher.com
5. Tá, mas o que eu escolho pra começar: faça você mesmo, bb
» Totalmente 0800!
5. Tá, mas o que eu escolho pra começar: Realtime
» Versão grátis e paga
» Bibliotecas para várias linguagens, inclusive PHP
5. Tá, mas o que eu escolho pra começar: Ratchet
» Usa React PHP
» Trabalha com componentes
Muito obrigada!
Alguma dúvida?
@mariannactx
REFERENCIAS
tools.ietf.org/html/rfc6455
www.leggetter.co.uk/real-time-web-technologies-guide/
Repositorio no github

O que há de PHP e Websockets por aí?

Notas do Editor

  • #2 Vai dar tudo certo É uma olhada rápida e levemente detalhada sobre o que é e como trabalhar com comunicação em tempo real usando websockets e php
  • #3 É importante falar como e porquê conheceu websockets (falar de segunda tela)
  • #6 O websokets surgiu para resolver alguns problemas. Existem as situações x, y e z que precisam de conexão em tempo real, ou seja, que o cliente seja atualizado sem que atualize a página. A solução mais simples seria o pooling, mas com ela temos os problemas x, y e z.
  • #7 O long pooling é uma solução melhor. A definição dessa técnica se confunde com o que muita gente chama de COMET. É o que o google usa para atualizar os emails sem que o usuário atualize a página. É o que o facebook utiliza para manter o chat e as outras funções que vão acontecendo sem que a gente saia da página. Falar sobre engenheiro do facebook que disse que só não usam websockets pq não pega em todos os browsers. Apenas nos principais, hehe.
  • #8 É um protocolo que permite comunicação persistente, bidirecional e full duplex entre cliente e servidor. We do not need to send headers at each message — so no overhead, just data. O origin vem no cabeçalho Emoldura a mensagem de forma que ela alcance o cliente da mesma forma que foi enviada Camada que define quais os protocolos de comunicação a serem utilizados
  • #10 Faz parte do core do php. PHP 5, 7
  • #11 Está na PECL, 4, 5 7
  • #12 Está na PECL, 4, 5 7
  • #14 Vc viu que é muito fácil a lógica do websockets. Pq não fazer vc mesmo? Esse aqui é uma combinação de 3 ou 4 bibliotecas que achei pelo git hub.
  • #15 Definição:
  • #16 Definição: