SlideShare une entreprise Scribd logo
1  sur  33
Télécharger pour lire hors ligne
Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.br
Core Modules - net
É possível interagir com diversos tipos
de protocolos baseados em TCP
HTTP, SMTP, FTP, POP3, IRC e
muitos outros
O TCP, ou Transmission Control Protocol, é um
protocolo da camada de transporte, orientado a
conexão, bidirecional e responsável por controlar
o processo de transmissão de dados.
Trata problemas como a perda, duplicação
e ainda garante a ordenação dos pacotes
Vamos criar um chat com suporte
para múltiplos clientes
Começando pelo servidor
Importando o módulo net
server.js
1. var net = require('net');
Criando um servidor
server.js
1. var net = require('net');
2.
3. net.createServer();
Escutando na porta 3000
server.js
1. var net = require('net');
2.
3. net.createServer().listen(3000);
Criando o cliente
Importando o módulo net
client.js
1. var net = require('net');
Conectando na porta 3000
client.js
1. var net = require('net');
2.
3. net.connect(3000);
Conectando em 127.0.0.1 na porta 3000
client.js
1. var net = require('net');
2.
3. net.connect({host: '127.0.0.1', port: 3000});
Trocando as primeiras mensagens
entre o cliente e o servidor
Enviando uma mensagem para o cliente
server.js
1. var net = require('net');
2.
3. net.createServer(function (connection) {
4. connection.write('Hello, I am the server!');
5. }).listen(3000);
Recebendo uma mensagem do servidor
client.js
1. var net = require('net');
2.
3. var client = net.connect(3000);
4. client.on('data', function (message) {
5. console.log(message.toString());
6. });
Mandando uma mensagem para o servidor
client.js
1. var net = require('net');
2.
3. var client = net.connect(3000);
4. client.on('connect', function () {
5. client.write('Hello, I am the client!');
6. });
7. client.on('data', function (message) {
8. console.log(message.toString());
9. });
Recebendo uma mensagem do cliente
server.js
1. var net = require('net');
2.
3. net.createServer(function (connection) {
4. connection.write('Hello, I am the server!');
5. connection.on('data', function (message) {
6. console.log(message.toString());
7. });
8. }).listen(3000);
Trocando mensagens entre
os clientes
Mandando uma mensagem para o servidor
client.js
1. var net = require('net');
2.
3. var client = net.connect(3000);
4. client.on('data', function (message) {
5. console.log(message.toString());
6. });
7. process.stdin.on('readable', function () {
8. var message = process.stdin.read();
9. if (!message) return;
10. message = message.toString().replace(/n/, '');
11. client.write(message);
12. });
Recebendo uma mensagem do cliente
server.js
1. var net = require('net');
2.
3. net.createServer(function (connection) {
4. connection.on('data', function (message) {
5. console.log(message.toString());
6. });
7. }).listen(3000);
Criando um array de conexões
server.js
1. var net = require('net');
2.
3. var connections = [];
4. net.createServer(function (connection) {
5. connection.on('data', function (message) {
6. console.log(message.toString());
7. });
8. }).listen(3000);
Adicionando as novas conexões ao array
server.js
1. var net = require('net');
2.
3. var connections = [];
4. net.createServer(function (connection) {
5. connections.push(connection);
6. connection.on('data', function (message) {
7. console.log(message.toString());
8. });
9. }).listen(3000);
Fazendo broadcast de cada mensagem
server.js
1. var net = require('net');
2.
3. var connections = [];
4. var broadcast = function (message) {
5. connections.forEach(function (connection) {
6. connection.write(message);
7. });
8. };
9. net.createServer(function (connection) {
10. connections.push(connection);
11. connection.on('data', function (message) {
12. broadcast(message);
13. });
14. }).listen(3000);
Enviando a mensagem apenas para os outros
server.js
1. var net = require('net');
2.
3. var connections = [];
4. var broadcast = function (message, origin) {
5. connections.forEach(function (connection) {
6. if (connection === origin) return;
7. connection.write(message);
8. });
9. };
10. net.createServer(function (connection) {
11. connections.push(connection);
12. connection.on('data', function (message) {
13. broadcast(message, connection);
14. });
15. }).listen(3000);
Identificando cada cliente
Trocando o nickname
server.js
1. var net = require('net');
2.
3. var connections = [];
4. var broadcast = function (message, origin) {
5. connections.forEach(function (connection) {
6. if (connection === origin) return;
7. connection.write(message);
8. });
9. };
10. net.createServer(function (connection) {
11. connections.push(connection);
12. connection.on('data', function (message) {
13. var command = message.toString();
14. if (command.indexOf('/nickname') === 0) {
15. var nickname = command.replace('/nickname ', '');
16. broadcast(connection.nickname + ' is now ' + nickname);
17. connection.nickname = nickname;
18. return;
19. }
20. broadcast(connection.nickname + ' > ' + message, connection);
21. });
22. }).listen(3000);
Encerrando a comunicação entre
o cliente e o servidor
Tratando o encerramento da conexão
client.js
1. var net = require('net');
2.
3. var client = net.connect(3000);
4. client.on('data', function (message) {
5. console.log(message.toString());
6. });
7. client.on('end', function () {
8. process.exit();
9. });
10. process.stdin.on('readable', function () {
11. var message = process.stdin.read();
12. if (!message) return;
13. message = message.toString().replace(/n/, '');
14. client.write(message);
15. });
Tratando o encerramento da conexão
server.js
1. var net = require('net');
2.
3. var connections = [];
4. var broadcast = function (message, origin) {
5. connections.forEach(function (connection) {
6. if (connection === origin) return;
7. connection.write(message);
8. });
9. };
10. net.createServer(function (connection) {
11. connections.push(connection);
12. connection.on('data', function (message) {
13. var command = message.toString();
14. if (command.indexOf('/nickname') === 0) {
15. var nickname = command.replace('/nickname ', '');
16. broadcast(connection.nickname + ' is now ' + nickname);
17. connection.nickname = nickname;
18. return;
19. }
20. broadcast(connection.nickname + ' > ' + message, connection);
21. });
22. connection.on('end', function () {
23. broadcast(connection.nickname + ' has left!', connection);
24. connections.splice(connections.indexOf(connection), 1);
25. });
26. }).listen(3000);
27.
Confira toda a documentação em
https://nodejs.org/api/net.html
Rodrigo Branas
Agile Code: http://www.agilecode.com.br
Twitter: @rodrigobranas
SlideShare: http://www.slideshare.com/rodrigobranas
YouTube: http://www.youtube.com/rodrigobranas
LinkedIn: http://br.linkedin.com/in/rodrigobranas
+Plus: https://plus.google.com/+RodrigoBranas
GitHub: http://www.github.com/rodrigobranas

Contenu connexe

Tendances

Segurança de redes - Conceitos de firewall
Segurança de redes - Conceitos de firewall Segurança de redes - Conceitos de firewall
Segurança de redes - Conceitos de firewall Cleber Ramos
 
[Advantech] ADAM-3600 open vpn setting Tutorial step by step
[Advantech] ADAM-3600 open vpn setting Tutorial step by step [Advantech] ADAM-3600 open vpn setting Tutorial step by step
[Advantech] ADAM-3600 open vpn setting Tutorial step by step Ming-Hung Hseih
 
Patentes e Registro de Softwares
Patentes e Registro de SoftwaresPatentes e Registro de Softwares
Patentes e Registro de SoftwaresByte Girl
 
Segurança da informação - Aula 3 - Ciclo de vida, classificação de ativos
Segurança da informação - Aula 3 - Ciclo de vida, classificação de ativosSegurança da informação - Aula 3 - Ciclo de vida, classificação de ativos
Segurança da informação - Aula 3 - Ciclo de vida, classificação de ativosCleber Fonseca
 
Algoritmos e lp parte 4-vetores matrizes e registros
Algoritmos e lp parte 4-vetores matrizes e registrosAlgoritmos e lp parte 4-vetores matrizes e registros
Algoritmos e lp parte 4-vetores matrizes e registrosMauro Pereira
 
Normas da ABNT NBR 14565 - Procedimento Básico Para Elaboração de projetos de...
Normas da ABNT NBR 14565 - Procedimento Básico Para Elaboração de projetos de...Normas da ABNT NBR 14565 - Procedimento Básico Para Elaboração de projetos de...
Normas da ABNT NBR 14565 - Procedimento Básico Para Elaboração de projetos de...Eduardo Santana
 
Arquitetura de computadores cap 5 e 6
Arquitetura de computadores cap 5 e 6Arquitetura de computadores cap 5 e 6
Arquitetura de computadores cap 5 e 6PamelaAssuno1
 
LAUDO NBR 14518 (Sistemas de ventilação para cozinhas profissionais)
LAUDO NBR 14518 (Sistemas de ventilação para cozinhas profissionais) LAUDO NBR 14518 (Sistemas de ventilação para cozinhas profissionais)
LAUDO NBR 14518 (Sistemas de ventilação para cozinhas profissionais) Sérgio Valadão
 
Variaveis locais e globais
Variaveis locais e globaisVariaveis locais e globais
Variaveis locais e globais111111119
 
Uncovering an Apache Spark 2 Benchmark - Configuration, Tuning and Test Results
Uncovering an Apache Spark 2 Benchmark - Configuration, Tuning and Test ResultsUncovering an Apache Spark 2 Benchmark - Configuration, Tuning and Test Results
Uncovering an Apache Spark 2 Benchmark - Configuration, Tuning and Test ResultsDataWorks Summit
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptRodrigo Branas
 

Tendances (20)

Seguranca de rede
Seguranca de redeSeguranca de rede
Seguranca de rede
 
Segurança de redes - Conceitos de firewall
Segurança de redes - Conceitos de firewall Segurança de redes - Conceitos de firewall
Segurança de redes - Conceitos de firewall
 
[Advantech] ADAM-3600 open vpn setting Tutorial step by step
[Advantech] ADAM-3600 open vpn setting Tutorial step by step [Advantech] ADAM-3600 open vpn setting Tutorial step by step
[Advantech] ADAM-3600 open vpn setting Tutorial step by step
 
07 html formulários
07 html   formulários07 html   formulários
07 html formulários
 
Curso de Python e Django
Curso de Python e DjangoCurso de Python e Django
Curso de Python e Django
 
Ficha controle incendio
Ficha controle incendioFicha controle incendio
Ficha controle incendio
 
Patentes e Registro de Softwares
Patentes e Registro de SoftwaresPatentes e Registro de Softwares
Patentes e Registro de Softwares
 
Logica de Programacao
Logica de ProgramacaoLogica de Programacao
Logica de Programacao
 
Segurança da informação - Aula 3 - Ciclo de vida, classificação de ativos
Segurança da informação - Aula 3 - Ciclo de vida, classificação de ativosSegurança da informação - Aula 3 - Ciclo de vida, classificação de ativos
Segurança da informação - Aula 3 - Ciclo de vida, classificação de ativos
 
Algoritmos e lp parte 4-vetores matrizes e registros
Algoritmos e lp parte 4-vetores matrizes e registrosAlgoritmos e lp parte 4-vetores matrizes e registros
Algoritmos e lp parte 4-vetores matrizes e registros
 
Normas da ABNT NBR 14565 - Procedimento Básico Para Elaboração de projetos de...
Normas da ABNT NBR 14565 - Procedimento Básico Para Elaboração de projetos de...Normas da ABNT NBR 14565 - Procedimento Básico Para Elaboração de projetos de...
Normas da ABNT NBR 14565 - Procedimento Básico Para Elaboração de projetos de...
 
Arquitetura de computadores cap 5 e 6
Arquitetura de computadores cap 5 e 6Arquitetura de computadores cap 5 e 6
Arquitetura de computadores cap 5 e 6
 
LAUDO NBR 14518 (Sistemas de ventilação para cozinhas profissionais)
LAUDO NBR 14518 (Sistemas de ventilação para cozinhas profissionais) LAUDO NBR 14518 (Sistemas de ventilação para cozinhas profissionais)
LAUDO NBR 14518 (Sistemas de ventilação para cozinhas profissionais)
 
Variaveis locais e globais
Variaveis locais e globaisVariaveis locais e globais
Variaveis locais e globais
 
TDD com Python (Completo)
TDD com Python (Completo)TDD com Python (Completo)
TDD com Python (Completo)
 
Uncovering an Apache Spark 2 Benchmark - Configuration, Tuning and Test Results
Uncovering an Apache Spark 2 Benchmark - Configuration, Tuning and Test ResultsUncovering an Apache Spark 2 Benchmark - Configuration, Tuning and Test Results
Uncovering an Apache Spark 2 Benchmark - Configuration, Tuning and Test Results
 
Teste de software - Conhecendo e Aplicando
Teste de software - Conhecendo e AplicandoTeste de software - Conhecendo e Aplicando
Teste de software - Conhecendo e Aplicando
 
Linguagem SQL
Linguagem SQLLinguagem SQL
Linguagem SQL
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScript
 
Conectando o PIC - 16F877A.pdf
Conectando o PIC - 16F877A.pdfConectando o PIC - 16F877A.pdf
Conectando o PIC - 16F877A.pdf
 

En vedette

Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasNode.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasRodrigo Branas
 
Node.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasNode.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasRodrigo Branas
 
Node.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo BranasNode.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo BranasRodrigo Branas
 
Node.js - #2 - Sistema de Módulos - Rodrigo Branas
Node.js - #2 - Sistema de Módulos - Rodrigo BranasNode.js - #2 - Sistema de Módulos - Rodrigo Branas
Node.js - #2 - Sistema de Módulos - Rodrigo BranasRodrigo Branas
 
Node.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo BranasNode.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo BranasRodrigo Branas
 
Node.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasNode.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasRodrigo Branas
 
Criando serviços com AngularJS
Criando serviços com AngularJSCriando serviços com AngularJS
Criando serviços com AngularJSRodrigo Branas
 
HTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJSHTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJSRodrigo Branas
 
A evolução do AngularJS
A evolução do AngularJSA evolução do AngularJS
A evolução do AngularJSRodrigo Branas
 
HTTP Interceptors com AngularJS
HTTP Interceptors com AngularJSHTTP Interceptors com AngularJS
HTTP Interceptors com AngularJSRodrigo Branas
 
Utilizando diretivas com AngularJS
Utilizando diretivas com AngularJSUtilizando diretivas com AngularJS
Utilizando diretivas com AngularJSRodrigo Branas
 
Introdução ao AngularJS
Introdução ao AngularJSIntrodução ao AngularJS
Introdução ao AngularJSRodrigo Branas
 
Construindo Diretivas com AngularJS
Construindo Diretivas com AngularJSConstruindo Diretivas com AngularJS
Construindo Diretivas com AngularJSRodrigo Branas
 
Técnicas de Refactoring
Técnicas de RefactoringTécnicas de Refactoring
Técnicas de RefactoringRodrigo Branas
 
#5 - Git - Contribuindo com um repositório remoto
#5 - Git - Contribuindo com um repositório remoto#5 - Git - Contribuindo com um repositório remoto
#5 - Git - Contribuindo com um repositório remotoRodrigo Branas
 
Test-Driven Development com JavaScript, Jasmine Karma
Test-Driven Development com JavaScript, Jasmine  KarmaTest-Driven Development com JavaScript, Jasmine  Karma
Test-Driven Development com JavaScript, Jasmine KarmaRodrigo Branas
 

En vedette (20)

Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasNode.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
 
Node.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasNode.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo Branas
 
Node.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo BranasNode.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo Branas
 
Node.js - #2 - Sistema de Módulos - Rodrigo Branas
Node.js - #2 - Sistema de Módulos - Rodrigo BranasNode.js - #2 - Sistema de Módulos - Rodrigo Branas
Node.js - #2 - Sistema de Módulos - Rodrigo Branas
 
Node.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo BranasNode.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo Branas
 
Node.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasNode.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo Branas
 
Criando serviços com AngularJS
Criando serviços com AngularJSCriando serviços com AngularJS
Criando serviços com AngularJS
 
HTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJSHTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJS
 
A evolução do AngularJS
A evolução do AngularJSA evolução do AngularJS
A evolução do AngularJS
 
HTTP Interceptors com AngularJS
HTTP Interceptors com AngularJSHTTP Interceptors com AngularJS
HTTP Interceptors com AngularJS
 
Utilizando diretivas com AngularJS
Utilizando diretivas com AngularJSUtilizando diretivas com AngularJS
Utilizando diretivas com AngularJS
 
Introdução ao AngularJS
Introdução ao AngularJSIntrodução ao AngularJS
Introdução ao AngularJS
 
Construindo Diretivas com AngularJS
Construindo Diretivas com AngularJSConstruindo Diretivas com AngularJS
Construindo Diretivas com AngularJS
 
Grunt
GruntGrunt
Grunt
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
Técnicas de Refactoring
Técnicas de RefactoringTécnicas de Refactoring
Técnicas de Refactoring
 
#5 - Git - Contribuindo com um repositório remoto
#5 - Git - Contribuindo com um repositório remoto#5 - Git - Contribuindo com um repositório remoto
#5 - Git - Contribuindo com um repositório remoto
 
Test-Driven Development com JavaScript, Jasmine Karma
Test-Driven Development com JavaScript, Jasmine  KarmaTest-Driven Development com JavaScript, Jasmine  Karma
Test-Driven Development com JavaScript, Jasmine Karma
 
#2 - Git - DAG
#2 - Git - DAG#2 - Git - DAG
#2 - Git - DAG
 
Selenium - WebDriver
Selenium - WebDriverSelenium - WebDriver
Selenium - WebDriver
 

Similaire à Como criar um chat simples com Node.js usando o módulo net

Implementação em ActionScript 3 do Protocolo IRC
Implementação em ActionScript 3 do Protocolo IRCImplementação em ActionScript 3 do Protocolo IRC
Implementação em ActionScript 3 do Protocolo IRCJosé Travado
 
Novas APIs do Java EE 7: JMS e Web Services
Novas APIs do Java EE 7: JMS e Web ServicesNovas APIs do Java EE 7: JMS e Web Services
Novas APIs do Java EE 7: JMS e Web ServicesHelder da Rocha
 
Windows Phone: Verificando a conexão com a internet
Windows Phone: Verificando a conexão com a internetWindows Phone: Verificando a conexão com a internet
Windows Phone: Verificando a conexão com a internetDevmedia
 
Verificando a conexão com a internet no Windows Phone
Verificando a conexão com a internet no Windows PhoneVerificando a conexão com a internet no Windows Phone
Verificando a conexão com a internet no Windows PhoneDevmedia
 
Interagindo com web services RPC, SOAP e REST utilizando PHP
Interagindo com web services RPC, SOAP e REST utilizando PHPInteragindo com web services RPC, SOAP e REST utilizando PHP
Interagindo com web services RPC, SOAP e REST utilizando PHPEduardo Cesar
 
1089335456 paper 4 sockets em java
1089335456 paper 4   sockets em java1089335456 paper 4   sockets em java
1089335456 paper 4 sockets em javajosealcides2005
 
Integração do Flex com PHP através do AMFPHP
Integração do Flex com PHP através do AMFPHPIntegração do Flex com PHP através do AMFPHP
Integração do Flex com PHP através do AMFPHPelliando dias
 
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EEJavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EERodrigo Cândido da Silva
 
Aplicações Realtime em Android | Fisl 15 | GuMobileRS
Aplicações Realtime em Android | Fisl 15 | GuMobileRSAplicações Realtime em Android | Fisl 15 | GuMobileRS
Aplicações Realtime em Android | Fisl 15 | GuMobileRSJackson F. de A. Mafra
 
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo SilveiraServlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo SilveiraCaelum
 
Web 2.0 e AJAX - Parte 2 / 3
Web 2.0 e AJAX - Parte 2 / 3Web 2.0 e AJAX - Parte 2 / 3
Web 2.0 e AJAX - Parte 2 / 3David Ruiz
 
Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017Rodrigo Stefani Domingues
 

Similaire à Como criar um chat simples com Node.js usando o módulo net (20)

Sockets java
Sockets javaSockets java
Sockets java
 
Implementação em ActionScript 3 do Protocolo IRC
Implementação em ActionScript 3 do Protocolo IRCImplementação em ActionScript 3 do Protocolo IRC
Implementação em ActionScript 3 do Protocolo IRC
 
Novas APIs do Java EE 7: JMS e Web Services
Novas APIs do Java EE 7: JMS e Web ServicesNovas APIs do Java EE 7: JMS e Web Services
Novas APIs do Java EE 7: JMS e Web Services
 
Windows Phone: Verificando a conexão com a internet
Windows Phone: Verificando a conexão com a internetWindows Phone: Verificando a conexão com a internet
Windows Phone: Verificando a conexão com a internet
 
Verificando a conexão com a internet no Windows Phone
Verificando a conexão com a internet no Windows PhoneVerificando a conexão com a internet no Windows Phone
Verificando a conexão com a internet no Windows Phone
 
Interagindo com web services RPC, SOAP e REST utilizando PHP
Interagindo com web services RPC, SOAP e REST utilizando PHPInteragindo com web services RPC, SOAP e REST utilizando PHP
Interagindo com web services RPC, SOAP e REST utilizando PHP
 
1089335456 paper 4 sockets em java
1089335456 paper 4   sockets em java1089335456 paper 4   sockets em java
1089335456 paper 4 sockets em java
 
Java 16 Jdbc
Java 16 JdbcJava 16 Jdbc
Java 16 Jdbc
 
Computacao distribuida com rmi
Computacao distribuida com rmiComputacao distribuida com rmi
Computacao distribuida com rmi
 
Integração do Flex com PHP através do AMFPHP
Integração do Flex com PHP através do AMFPHPIntegração do Flex com PHP através do AMFPHP
Integração do Flex com PHP através do AMFPHP
 
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EEJavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
 
XML-RPC.pdf
XML-RPC.pdfXML-RPC.pdf
XML-RPC.pdf
 
Prog web 05-php-mysql
Prog web 05-php-mysqlProg web 05-php-mysql
Prog web 05-php-mysql
 
Aplicações Realtime em Android | Fisl 15 | GuMobileRS
Aplicações Realtime em Android | Fisl 15 | GuMobileRSAplicações Realtime em Android | Fisl 15 | GuMobileRS
Aplicações Realtime em Android | Fisl 15 | GuMobileRS
 
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo SilveiraServlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
 
Fundamentos de Sockets
Fundamentos de SocketsFundamentos de Sockets
Fundamentos de Sockets
 
Fundamentos de Sockets
Fundamentos de SocketsFundamentos de Sockets
Fundamentos de Sockets
 
Web 2.0 e AJAX - Parte 2 / 3
Web 2.0 e AJAX - Parte 2 / 3Web 2.0 e AJAX - Parte 2 / 3
Web 2.0 e AJAX - Parte 2 / 3
 
Lab 06 ping_com_udp
Lab 06 ping_com_udpLab 06 ping_com_udp
Lab 06 ping_com_udp
 
Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017
 

Plus de Rodrigo Branas

#6 - Git - Desfazendo as coisas
#6 - Git - Desfazendo as coisas#6 - Git - Desfazendo as coisas
#6 - Git - Desfazendo as coisasRodrigo Branas
 
#1 - Git - Introdução
#1 - Git - Introdução#1 - Git - Introdução
#1 - Git - IntroduçãoRodrigo Branas
 
#3 - Git - Branching e Merging
#3 - Git - Branching e Merging#3 - Git - Branching e Merging
#3 - Git - Branching e MergingRodrigo Branas
 
JavaScript - Expressões Regulares
JavaScript - Expressões RegularesJavaScript - Expressões Regulares
JavaScript - Expressões RegularesRodrigo Branas
 
Automação de Testes com AngularJS
Automação de Testes com AngularJSAutomação de Testes com AngularJS
Automação de Testes com AngularJSRodrigo Branas
 
Criando Filtros com AngularJS
Criando Filtros com AngularJSCriando Filtros com AngularJS
Criando Filtros com AngularJSRodrigo Branas
 
Criando aplicações Single-Page com AngularJS
Criando aplicações Single-Page com AngularJSCriando aplicações Single-Page com AngularJS
Criando aplicações Single-Page com AngularJSRodrigo Branas
 

Plus de Rodrigo Branas (12)

Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
#6 - Git - Desfazendo as coisas
#6 - Git - Desfazendo as coisas#6 - Git - Desfazendo as coisas
#6 - Git - Desfazendo as coisas
 
#1 - Git - Introdução
#1 - Git - Introdução#1 - Git - Introdução
#1 - Git - Introdução
 
#4 - Git - Stash
#4 - Git - Stash#4 - Git - Stash
#4 - Git - Stash
 
#3 - Git - Branching e Merging
#3 - Git - Branching e Merging#3 - Git - Branching e Merging
#3 - Git - Branching e Merging
 
JavaScript - Date
JavaScript - DateJavaScript - Date
JavaScript - Date
 
JavaScript - Expressões Regulares
JavaScript - Expressões RegularesJavaScript - Expressões Regulares
JavaScript - Expressões Regulares
 
Automação de Testes com AngularJS
Automação de Testes com AngularJSAutomação de Testes com AngularJS
Automação de Testes com AngularJS
 
Scope AngularJS
Scope AngularJSScope AngularJS
Scope AngularJS
 
Criando Filtros com AngularJS
Criando Filtros com AngularJSCriando Filtros com AngularJS
Criando Filtros com AngularJS
 
Criando aplicações Single-Page com AngularJS
Criando aplicações Single-Page com AngularJSCriando aplicações Single-Page com AngularJS
Criando aplicações Single-Page com AngularJS
 
Bower
BowerBower
Bower
 

Como criar um chat simples com Node.js usando o módulo net

  • 1. Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.br Core Modules - net
  • 2. É possível interagir com diversos tipos de protocolos baseados em TCP
  • 3. HTTP, SMTP, FTP, POP3, IRC e muitos outros
  • 4. O TCP, ou Transmission Control Protocol, é um protocolo da camada de transporte, orientado a conexão, bidirecional e responsável por controlar o processo de transmissão de dados.
  • 5. Trata problemas como a perda, duplicação e ainda garante a ordenação dos pacotes
  • 6. Vamos criar um chat com suporte para múltiplos clientes
  • 8. Importando o módulo net server.js 1. var net = require('net');
  • 9. Criando um servidor server.js 1. var net = require('net'); 2. 3. net.createServer();
  • 10. Escutando na porta 3000 server.js 1. var net = require('net'); 2. 3. net.createServer().listen(3000);
  • 12. Importando o módulo net client.js 1. var net = require('net');
  • 13. Conectando na porta 3000 client.js 1. var net = require('net'); 2. 3. net.connect(3000);
  • 14. Conectando em 127.0.0.1 na porta 3000 client.js 1. var net = require('net'); 2. 3. net.connect({host: '127.0.0.1', port: 3000});
  • 15. Trocando as primeiras mensagens entre o cliente e o servidor
  • 16. Enviando uma mensagem para o cliente server.js 1. var net = require('net'); 2. 3. net.createServer(function (connection) { 4. connection.write('Hello, I am the server!'); 5. }).listen(3000);
  • 17. Recebendo uma mensagem do servidor client.js 1. var net = require('net'); 2. 3. var client = net.connect(3000); 4. client.on('data', function (message) { 5. console.log(message.toString()); 6. });
  • 18. Mandando uma mensagem para o servidor client.js 1. var net = require('net'); 2. 3. var client = net.connect(3000); 4. client.on('connect', function () { 5. client.write('Hello, I am the client!'); 6. }); 7. client.on('data', function (message) { 8. console.log(message.toString()); 9. });
  • 19. Recebendo uma mensagem do cliente server.js 1. var net = require('net'); 2. 3. net.createServer(function (connection) { 4. connection.write('Hello, I am the server!'); 5. connection.on('data', function (message) { 6. console.log(message.toString()); 7. }); 8. }).listen(3000);
  • 21. Mandando uma mensagem para o servidor client.js 1. var net = require('net'); 2. 3. var client = net.connect(3000); 4. client.on('data', function (message) { 5. console.log(message.toString()); 6. }); 7. process.stdin.on('readable', function () { 8. var message = process.stdin.read(); 9. if (!message) return; 10. message = message.toString().replace(/n/, ''); 11. client.write(message); 12. });
  • 22. Recebendo uma mensagem do cliente server.js 1. var net = require('net'); 2. 3. net.createServer(function (connection) { 4. connection.on('data', function (message) { 5. console.log(message.toString()); 6. }); 7. }).listen(3000);
  • 23. Criando um array de conexões server.js 1. var net = require('net'); 2. 3. var connections = []; 4. net.createServer(function (connection) { 5. connection.on('data', function (message) { 6. console.log(message.toString()); 7. }); 8. }).listen(3000);
  • 24. Adicionando as novas conexões ao array server.js 1. var net = require('net'); 2. 3. var connections = []; 4. net.createServer(function (connection) { 5. connections.push(connection); 6. connection.on('data', function (message) { 7. console.log(message.toString()); 8. }); 9. }).listen(3000);
  • 25. Fazendo broadcast de cada mensagem server.js 1. var net = require('net'); 2. 3. var connections = []; 4. var broadcast = function (message) { 5. connections.forEach(function (connection) { 6. connection.write(message); 7. }); 8. }; 9. net.createServer(function (connection) { 10. connections.push(connection); 11. connection.on('data', function (message) { 12. broadcast(message); 13. }); 14. }).listen(3000);
  • 26. Enviando a mensagem apenas para os outros server.js 1. var net = require('net'); 2. 3. var connections = []; 4. var broadcast = function (message, origin) { 5. connections.forEach(function (connection) { 6. if (connection === origin) return; 7. connection.write(message); 8. }); 9. }; 10. net.createServer(function (connection) { 11. connections.push(connection); 12. connection.on('data', function (message) { 13. broadcast(message, connection); 14. }); 15. }).listen(3000);
  • 28. Trocando o nickname server.js 1. var net = require('net'); 2. 3. var connections = []; 4. var broadcast = function (message, origin) { 5. connections.forEach(function (connection) { 6. if (connection === origin) return; 7. connection.write(message); 8. }); 9. }; 10. net.createServer(function (connection) { 11. connections.push(connection); 12. connection.on('data', function (message) { 13. var command = message.toString(); 14. if (command.indexOf('/nickname') === 0) { 15. var nickname = command.replace('/nickname ', ''); 16. broadcast(connection.nickname + ' is now ' + nickname); 17. connection.nickname = nickname; 18. return; 19. } 20. broadcast(connection.nickname + ' > ' + message, connection); 21. }); 22. }).listen(3000);
  • 29. Encerrando a comunicação entre o cliente e o servidor
  • 30. Tratando o encerramento da conexão client.js 1. var net = require('net'); 2. 3. var client = net.connect(3000); 4. client.on('data', function (message) { 5. console.log(message.toString()); 6. }); 7. client.on('end', function () { 8. process.exit(); 9. }); 10. process.stdin.on('readable', function () { 11. var message = process.stdin.read(); 12. if (!message) return; 13. message = message.toString().replace(/n/, ''); 14. client.write(message); 15. });
  • 31. Tratando o encerramento da conexão server.js 1. var net = require('net'); 2. 3. var connections = []; 4. var broadcast = function (message, origin) { 5. connections.forEach(function (connection) { 6. if (connection === origin) return; 7. connection.write(message); 8. }); 9. }; 10. net.createServer(function (connection) { 11. connections.push(connection); 12. connection.on('data', function (message) { 13. var command = message.toString(); 14. if (command.indexOf('/nickname') === 0) { 15. var nickname = command.replace('/nickname ', ''); 16. broadcast(connection.nickname + ' is now ' + nickname); 17. connection.nickname = nickname; 18. return; 19. } 20. broadcast(connection.nickname + ' > ' + message, connection); 21. }); 22. connection.on('end', function () { 23. broadcast(connection.nickname + ' has left!', connection); 24. connections.splice(connections.indexOf(connection), 1); 25. }); 26. }).listen(3000); 27.
  • 32. Confira toda a documentação em https://nodejs.org/api/net.html
  • 33. Rodrigo Branas Agile Code: http://www.agilecode.com.br Twitter: @rodrigobranas SlideShare: http://www.slideshare.com/rodrigobranas YouTube: http://www.youtube.com/rodrigobranas LinkedIn: http://br.linkedin.com/in/rodrigobranas +Plus: https://plus.google.com/+RodrigoBranas GitHub: http://www.github.com/rodrigobranas