Pplware

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

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.


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.

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.

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.

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…

 

Exit mobile version