Node.js: Criando uma conexão real-time em Java

Veja nesse artigo como construir uma pequena aplicação real-time usando Java e Node.js criando uma comunicação entre os dois lados através de socket.

Cada vez mais é maior a interação entre o usuário e a web, através dos mais diversos meios, como jogos online, blogs, chats, interações em redes sociais, etc. Toda essa demanda, requer que a comunicação entre os aplicativos, client e server, ser tornem cada vez mais velozes, atendendo um grande número de usuário simultâneos de forma eficiente.

As atuais tecnologias que permitem “real-time” incluem: Node.js, banco de dados noSQL (mongodb), Socket.IO, entre outras.

Neste artigo vamos construir uma simples aplicação de comunicação real-time, usando java no client e nodejs no lado servidor. Com a ajuda deste artigo você poderá construir aplicativos Java (desktop, mobile, etc.) se comunicando com tecnologias real-time.

Nota: Conheça os Treinamentos Completos de Java da DevMedia.

Vamos construir um sistema bem simples, baseado em troca de mensagens no estilo “ping-pong".

Para isso, as seguintes ferramentas são necessárias:

Este artigo fornece os códigos para que você possa montar um pequeno mecanismo de comunicação real-time com Java e node.js. A partir destes exemplos funcionais, você poderá avançar, incrementando de acordo com sua necessidade.

Na Listagem 1 temos o código do servidor com Nodejs.

var net = require('net'); var HOST = '127.0.0.1'; // parametrizar o IP do Listen var PORT = 6969; // porta TCP LISTEN // Cria a instância do Server e aguarda uma conexão net.createServer(function(sock) { // Opa, recebemos uma conexão - um objeto socket é associado à conexão automaticamente console.log('CONNECTED: ' + sock.remoteAddress +':'+ sock.remotePort); // Adiciona um 'data' - "event handler" nesta instância do socket sock.on('data', function(data) { // dados foram recebidos no socket // Escreve a mensagem recebida de volta para o socket (echo) sock.write(data); }); // Adiciona um 'close' - "event handler" nesta instância do socket sock.on('close', function(data) { // conexão fechada console.log('CLOSED: ' + sock.remoteAddress +' '+ sock.remotePort); }); }).listen(PORT, HOST); console.log('Server listening on ' + HOST +':'+ PORT);
Listagem 1. Código fonte do servidor usando nodejs

Temos alguns pontos importantes a observar no código acima: logo no início do script, parametrize o IP e Porta onde o servidor nodejs irá fazer o Listen. Altere o 127.0.0.1 para o ip real (válido) do seu servidor, conforme abaixo:

var HOST = '127.0.0.1'; // parametrizar o IP do Listen var PORT = 6969; // porta TCP LISTEN

Veja abaixo a função que é disparada quando chega uma nova conexão, simplesmente faz um echo de volta para o programa client:

// Adiciona um 'data' - "event handler" nesta instância do socket sock.on('data', function(data) { // Escreve a mensagem recebida de volta para o socket (echo) sock.write(data); });

Na Listagem 2 temos o código client em Java, que abre uma conexão socket com o servidor, envia uma mensagem qualquer e a recebe de volta, imprimindo-a na tela.

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; /** * Classe Java (client) para Comunicação com servidor NodeJS * Escreve e recebe um simples "echo" -> "mensagem123" * by Douglas.Pasqua * http://douglaspasqua.com */ public class NodeJsEcho { // objeto socket private Socket socket = null; public static void main(String[] args) throws UnknownHostException, IOException, ClassNotFoundException { // instancia classe NodeJsEcho client = new NodeJsEcho(); // conexão socket tcp String ip = "1.1.1.1"; int port = 6969; client.socketConnect(ip, port); // escreve e recebe mensagem String message = "mensagem123"; System.out.println("Enviando: " + message); String retorno = client.echo(message); System.out.println("Recebendo: " + retorno); } // realiza a conexão com o socket private void socketConnect(String ip, int port) throws UnknownHostException, IOException { System.out.println("[Conectando socket...]"); this.socket = new Socket(ip, port); } // escreve e recebe mensagem full no socket (String) public String echo(String message) { try { // out & in PrintWriter out = new PrintWriter(getSocket().getOutputStream(), true); BufferedReader in = new BufferedReader (new InputStreamReader(getSocket().getInputStream())); // escreve str no socket e lêr out.println(message); String retorno = in.readLine(); return retorno; } catch (IOException e) { e.printStackTrace(); } return null; } // obtem instância do socket private Socket getSocket() { return socket; } }
Listagem 2. Código fonte do client java

Lembre-se da parametrização do IP e Porta onde o client em java irá se conectar com o servidor nodejs. Altere o ip 1.1.1.1 para o IP válido onde esta hospedado o aplicativo nodejs, conforme o código abaixo:

// instancia classe NodeJsEcho client = new NodeJsEcho(); // conexão socket tcp String ip = "1.1.1.1"; int port = 6969; client.socketConnect(ip, port);

Na Listagem 3 damos destaque ao método que escreve e recebe a mensagem no socket (nodejs).

// escreve e recebe mensagem full no socket (String) public String echo(String message) { try { // out & in PrintWriter out = new PrintWriter(getSocket().getOutputStream(), true); BufferedReader in = new BufferedReader(new InputStreamReader(getSocket().getInputStream())); // escreve str no socket e lêr out.println(message); String retorno = in.readLine(); return retorno; } catch (IOException e) { e.printStackTrace(); } return null; }
Listagem 3. Envio e recebimento de mensagens

Agora, na Figura 1 temos o printscreen do console do Eclipse. Ao rodar o client java nesse IDE, você deverá obter uma tela semelhante.

Figura 1. Resultado da compilação

Agora basta evoluir este simples aplicativo para sua necessidade. Espero que tenha aproveitado. Boa sorte!


Saiu na DevMedia!

  • Programe com o Node.js:
    Nesta série conversamos sobre qual é o propósito do Node.js e o que o torna diferente de outras tecnologias.

Saiba mais sobre Node.js ;)

  • Principais conceitos da plataforma Node.js:
    Nesta publicação serão descritos os principais conceitos da plataforma Node.js, sua aplicabilidade e um breve tutorial para elaboração de um aplicativo de micro blog.

Artigos relacionados