Este repositório será responsável por armazenar estudos e instruções sobre o php Swoole, uma extensão do php para lidar com servidores websocket e com uma resposta altamente rápida.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Matheo Bonucia 95d869bcf7 Atualizacao do README 6 months ago
.vscode Criacao do servidor websocket, criacao de uma exemplo html para comunicacao entre usuarios do socket 6 months ago
README.md Atualizacao do README 6 months ago
index.html Criacao do servidor websocket, criacao de uma exemplo html para comunicacao entre usuarios do socket 6 months ago
server.php Criacao do servidor websocket, criacao de uma exemplo html para comunicacao entre usuarios do socket 6 months ago

README.md

Introdução

O PHP-SWOOLE é uma extensão do PHP que tem como objetivo estar possibilitando o uso de servidores WebSocket. Isso parte do objetivo de estabelecer uma comunicação que tem de ficar sempre aberta e recebendo informações para exibir ao usuário em uma tela estática front-end. O php-swoole pode ser aplicado em várias áreas da Simples IP, visto que, a base das aplicações também é o php.

Instalação

Para instalação, você pode dar um pull de uma imagem do Docker e executar ela. O comando para dar o pull é:

docker pull phpswoole/swoole

Após o download, você pode verificar se a imagem foi baixada corretamente listando as imagens disponíveis localmente usando o comando:

docker images

Agora que você tem a imagem phpswoole/swoole baixada, pode executar um contêiner a partir dela usando o comando docker run. Por exemplo, para iniciar um contêiner interativo a partir dessa imagem, você pode usar:

docker run -it --rm phpswoole/swoole /bin/bash

Criando os exemples necessários

Socket

Para estar fazendo os testes e implementando posteriormente, crie, caso ainda não tenha criado, o arquivo do servidor websocket com o nome server.php e defina sua porta para estar ouvindo os listeners, importe as bibliotecas necessárias do Swoole e outras funções necessárias para deixar o servidor rodando na porta escolhida, siga o exemplo abaixo:

<?php
use  Swoole\WebSocket\Server;
use  Swoole\WebSocket\Frame;

$server  =  new  Server('0.0.0.0', 9501);
$server->on('message', function (Server  $server, Frame  $mensagem) {
$conexoes  =  $server->connections;
$origem  =  $mensagem->fd;
foreach ($conexoes  as  $conexao) {
if($conexao  ===  $origem) continue;
$server->push($conexao, json_encode(['type'  =>  'chat',  'text'  =>  $mensagem->data])
   );
      }
         });
$server->start();

Neste exemplo estamos usando a porta 9501 e dizendo que caso o servidor conectado seja o mesmo que o servidor de origem da mensagem, deve-se ignorar o texto para não duplicar as mensagens.

Client

Para colocar em prática, devemos estar conectando esse client ao socket, portanto, colocamos listeners para serem emitidos ao servidor ao mesmo tempo que instanciamos o servidor WebSocket no lado do cliente, abaixo trago um exemplo básico para implementar com o uso de JavaScript e tags HTML básicas:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Websocket - Cliente</title>
</head>
<body>
    <output></output>
    <input type="text">

    <script>
        const ws = new WebSocket('ws://127.0.0.1:9501/');
        const input = document.querySelector('input');
        const output = document.querySelector('output');

        ws.addEventListener('open', console.log);
        ws.addEventListener('message', console.log);

        ws.addEventListener('message', message => {
            const dados = JSON.parse(message.data);
            if(dados.type === 'chat') {
                output.append('Outro: ' + dados.text, document.createElement('br'));
            }
        });

        input.addEventListener('keypress', e => {
            if(e.code === 'Enter') {
                const valor = input.value;
                output.append('Eu: ' + valor, document.createElement('br'));
                ws.send(valor);

                input.value = '';
            }
        })
    </script>
</body>
</html>

Uso

Certifique-se de ao iniciar o Docker, executar o comando:

docker run --rm -p 9501:9501 -v $(pwd):/app -w /app phpswoole/swoole php server.php

Neste caso, estaremos utilizando a porta 9501 para o contêiner e estaremos iniciando ele a partir da pasta atual e criando o /app. A imagem tem o nome de phpswoole/swoole e estamos dizendo que iremos executar o comando:

php server.php

Ou seja, iremos executar o script em PHP que contém os códigos necessários para iniciar o servidor WebSocket. Assim, os arquivos .html e .php que criamos como exemplos anteriormente, precisam estar dentro da pasta /app. Certifique-se também de que ao abrir o seu editor de código, por exemplo o Vscode, ele esteja no diretório correto que seria dentro da pasta /app.

Para fazer os testes e estar utilizando da aplicação, você pode estar abrindo duas janelas do arquivo HTML no browser e realizar o envio de mensagens um para o outro.