WebSockets: Programar um chat com a biblioteca Socket.io é fácil

7 Comentários

O termo sockets certamente que não lhe será estranho, pois, já o abordamos aqui. Hoje vamos falar sobre WebSockets, mais concretamente sobre a biblioteca Socket.io que permite criar projetos fantásticos, com comunicações em tempo real.

Aprenda como pode criar um chat usando a biblioteca Socket.io.

WebSockets: Programar um chat com a biblioteca Socket.io é fácil


A biblioteca Socket.io permite desenvolver aplicações real-time e também comunicações bidirecionais entre cliente e o servidor.  Esta biblioteca funciona em qualquer plataforma e dispositivo, e garante um bom desempenho.

Desenvolvimento de um Chat

Para a criação de um chat vamos usar NodeJS e a biblioteca Socket.io. O objetivo é criar uma simples página HTML, onde o utilizador poderá escrever uma mensagem sendo que essa mensagem é de imediato enviada a todos os contactos.

Vamos começar…

Uma vez que vamos desenvolver em NodeJS, é necessário ter o interpretador instalado no nosso sistema. Podem ver os tutoriais de instalação para WindowsLinux e macOS.

Para começar vamos criar então um diretório com o nome chat-pplware e iniciamos o nosso projeto com o comando npm init. O resultado será algo semelhante ao apresentado na seguinte imagem.

WebSockets: Programar um chat com a biblioteca Socket.io é fácil

O próximo passo é instalar o Express. O Express é uma framework para Node que permite o desenvolvimento de aplicações web de uma forma muito simples. Para instalar o Express basta executar o seguinte comando:

npm install --save express@4.15.2

Vamos agora criar o ficheiro index.js e adicionar a seguinte informação:

var app = require('express')();
var http = require('http').Server(app);

app.get('/', function(req, res){
  res.sendFile(__dirname + '/index.html');
});

http.listen(3000, function(){
  console.log('Chat ativo no porto *:3000');
});

O próximo passo é criar o ficheiro index.html

<!doctype html>
<html>
  <head>
    <title>Socket.IO chat</title>
    <style>
      * { margin: 0; padding: 0; box-sizing: border-box; }
      body { font: 13px Helvetica, Arial; }
      form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; }
      form input { border: 0; padding: 10px; width: 90%; margin-right: .5%; }
      form button { width: 9%; background: rgb(130, 224, 255); border: none; padding: 10px; }
      #messages { list-style-type: none; margin: 0; padding: 0; }
      #messages li { padding: 5px 10px; }
      #messages li:nth-child(odd) { background: #eee; }
    </style>
  </head>
  <body>
    <ul id="messages"></ul>
      <form action="">
        <input id="m" autocomplete="off" /><button>Enviar</button>
      </form>
  </body>
</html>

Para testarem já o vosso projeto, basta que executem o comando node index.js. Em seguida abram o endereço localhost:3000 num browser. O resultado deverá ser idêntico ao seguinte.

WebSockets: Programar um chat com a biblioteca Socket.io é fácil

Integração do Socket.io

Vamos agora iniciar a programação das comunicações propriamente dita. Para isso vamos usar a biblioteca socket.io tal como referido. Esta biblioteca oferece funções para servidor e cliente. Para começar vamos instalar o socket.io como dependência:

npm install --save socket.io

Para testar, vamos inicializar o socket.io, passando o objeto http. Depois iremos apresentar uma mensagem a indicar que um Utilizador está ligado sempre que for detetada uma nova ligação ao socket.

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res){
  res.sendFile(__dirname + '/index.html');
});

io.on('connection', function(socket){
  console.log('Utilizador ligado');
});

http.listen(3000, function(){
  console.log('Chat ativo no porto *:3000');
});

No index devem adicionar o seguinte código antes do head



Emitir Eventos

A ideia principal por trás do Socket.IO é a possibilidade de enviar e receber eventos. Para tal, no form vamos emitir a string “chat message” para depois “apanhar” no código e sabermos que alguém escreveu algo.




No index.js iremos ter o seguinte código:

io.on('connection', function(socket){
  socket.on('chat message', function(msg){
    console.log('mensagem: ' + msg);
  });
});

Voltem a executar o comando node . e experimentem escrever uma mensagem no form do chat para ver se a mesma aparece no terminal.

WebSockets: Programar um chat com a biblioteca Socket.io é fácil

Se tudo funcionar, parabéns, pois já têm a primeira parte de comunicação do socket.

Parte 2 – broadcast de mensagens

Tal como referido, nesta parte vamos mostrar o código que será usado para fazer broadcast das mensagens para que estas sejam apresentadas a todos os que estão ligados ao chat (servidor). Para esse efeito o Socket.IO disponibiliza a função io.emit que pode ser usada da seguinte forma:

io.emit('evento', { for: 'para_todos' });

Por exemplo, se pretenderem enviar uma mensagem para todos podem usar a seguinte função.

io.on('connection', function(socket){
  socket.broadcast.emit('Ola');
});

Se pretenderem que quem envia também recebe a mensagem devem usar a função:

io.on('connection', function(socket){
  socket.on('chat message', function(msg){
    io.emit('chat message', msg);
  });
});

Do lado do cliente, quando é capturado o evento “chat message”,


O resultado deverá ser o seguinte:

E está feito. Se tudo estiver corretamente “programado”, parabéns,pois, acabaram de desenvolver um chat com base na biblioteca Socket.IO.

Leia também…

Sockets: Vamos programar um servidor que diz as horas

 

Partilhar:
Tags:

Comentários

7

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de VSCoder
    VSCoder

    Já Instalavas o VS Code…

    1. Avatar de fsf
      fsf

      Em termos visuais até pode ser apelativo, mas há ferramentas melhores.

  2. Avatar de Daniel
    Daniel

    Usar JQuery para fazer algo que podia ser feito com duas ou três linhas de JS, é simplesmente desnecessário.

      1. Avatar de Abóbora
        Abóbora

        Ele queria dizer para um exemplo tão pequeno, que não se justifica o load do jQuery.
        Claro que num exemplo pequeno, não faz sentido, mas se o objetivo é dar uma ideia de seguimento, de coisas maiores, obviamente que faz sentido usar esta ou outras ferramentas.
        Tudo depende do âmbito.

  3. Avatar de Line6
    Line6

    O Pplware podia ter mais este tipo de conteúdo. Existe muito leitor que consome este conteúdo como por exemplo eu.