SlideShare uma empresa Scribd logo
1 de 33
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

Modern Java web applications with Spring Boot and Thymeleaf
Modern Java web applications with Spring Boot and ThymeleafModern Java web applications with Spring Boot and Thymeleaf
Modern Java web applications with Spring Boot and ThymeleafLAY Leangsros
 
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
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring bootAntoine Rey
 
[OPD 2019] Attacking JWT tokens
[OPD 2019] Attacking JWT tokens[OPD 2019] Attacking JWT tokens
[OPD 2019] Attacking JWT tokensOWASP
 
Linux Sürücü Geliştirme (Linux Device Driver Development)
Linux Sürücü Geliştirme (Linux Device Driver Development)Linux Sürücü Geliştirme (Linux Device Driver Development)
Linux Sürücü Geliştirme (Linux Device Driver Development)kyasar
 
Architecture, bonnes pratiques et recettes pour la réussite de vos projets av...
Architecture, bonnes pratiques et recettes pour la réussite de vos projets av...Architecture, bonnes pratiques et recettes pour la réussite de vos projets av...
Architecture, bonnes pratiques et recettes pour la réussite de vos projets av...Microsoft Technet France
 
Spring boot Introduction
Spring boot IntroductionSpring boot Introduction
Spring boot IntroductionJeevesh Pandey
 
Getting started with Spring Security
Getting started with Spring SecurityGetting started with Spring Security
Getting started with Spring SecurityKnoldus Inc.
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Esun Kim
 
Http request&response by Vignesh 15 MAR 2014
Http request&response by Vignesh 15 MAR 2014Http request&response by Vignesh 15 MAR 2014
Http request&response by Vignesh 15 MAR 2014Navaneethan Naveen
 
ASP.NET MVC Presentation
ASP.NET MVC PresentationASP.NET MVC Presentation
ASP.NET MVC Presentationivpol
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terEmerson Macedo
 
Full session asp net mvc vs aspnet core
Full session asp net mvc vs aspnet coreFull session asp net mvc vs aspnet core
Full session asp net mvc vs aspnet corefizmhd
 
JUnit5 and TestContainers
JUnit5 and TestContainersJUnit5 and TestContainers
JUnit5 and TestContainersSunghyouk Bae
 
Testing with Spring, AOT, GraalVM, and JUnit 5 - Spring I/O 2023
Testing with Spring, AOT, GraalVM, and JUnit 5 - Spring I/O 2023Testing with Spring, AOT, GraalVM, and JUnit 5 - Spring I/O 2023
Testing with Spring, AOT, GraalVM, and JUnit 5 - Spring I/O 2023Sam Brannen
 

Mais procurados (20)

Modern Java web applications with Spring Boot and Thymeleaf
Modern Java web applications with Spring Boot and ThymeleafModern Java web applications with Spring Boot and Thymeleaf
Modern Java web applications with Spring Boot and Thymeleaf
 
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
 
Variable hoisting in JavaScript
Variable hoisting in JavaScriptVariable hoisting in JavaScript
Variable hoisting in JavaScript
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring boot
 
Introduction à ajax
Introduction à ajaxIntroduction à ajax
Introduction à ajax
 
gRPC - RPC rebirth?
gRPC - RPC rebirth?gRPC - RPC rebirth?
gRPC - RPC rebirth?
 
[OPD 2019] Attacking JWT tokens
[OPD 2019] Attacking JWT tokens[OPD 2019] Attacking JWT tokens
[OPD 2019] Attacking JWT tokens
 
Linux Sürücü Geliştirme (Linux Device Driver Development)
Linux Sürücü Geliştirme (Linux Device Driver Development)Linux Sürücü Geliştirme (Linux Device Driver Development)
Linux Sürücü Geliştirme (Linux Device Driver Development)
 
Architecture, bonnes pratiques et recettes pour la réussite de vos projets av...
Architecture, bonnes pratiques et recettes pour la réussite de vos projets av...Architecture, bonnes pratiques et recettes pour la réussite de vos projets av...
Architecture, bonnes pratiques et recettes pour la réussite de vos projets av...
 
Spring boot Introduction
Spring boot IntroductionSpring boot Introduction
Spring boot Introduction
 
Getting started with Spring Security
Getting started with Spring SecurityGetting started with Spring Security
Getting started with Spring Security
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
 
Http request&response by Vignesh 15 MAR 2014
Http request&response by Vignesh 15 MAR 2014Http request&response by Vignesh 15 MAR 2014
Http request&response by Vignesh 15 MAR 2014
 
ASP.NET MVC Presentation
ASP.NET MVC PresentationASP.NET MVC Presentation
ASP.NET MVC Presentation
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis ter
 
Full session asp net mvc vs aspnet core
Full session asp net mvc vs aspnet coreFull session asp net mvc vs aspnet core
Full session asp net mvc vs aspnet core
 
J2EE Introduction
J2EE IntroductionJ2EE Introduction
J2EE Introduction
 
JUnit5 and TestContainers
JUnit5 and TestContainersJUnit5 and TestContainers
JUnit5 and TestContainers
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
 
Testing with Spring, AOT, GraalVM, and JUnit 5 - Spring I/O 2023
Testing with Spring, AOT, GraalVM, and JUnit 5 - Spring I/O 2023Testing with Spring, AOT, GraalVM, and JUnit 5 - Spring I/O 2023
Testing with Spring, AOT, GraalVM, and JUnit 5 - Spring I/O 2023
 

Destaque

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
 
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
 
Validando Formulários com AngularJS
Validando Formulários com AngularJSValidando Formulários com AngularJS
Validando Formulários com AngularJSRodrigo Branas
 

Destaque (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
 
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
 
Validando Formulários com AngularJS
Validando Formulários com AngularJSValidando Formulários com AngularJS
Validando Formulários com AngularJS
 

Semelhante a 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
 
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
 
SOLID - Os cinco princípios ágeis de POO
SOLID - Os cinco princípios ágeis de POOSOLID - Os cinco princípios ágeis de POO
SOLID - Os cinco princípios ágeis de POORamon Valerio
 

Semelhante a 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
 
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
 
SOLID - Os cinco princípios ágeis de POO
SOLID - Os cinco princípios ágeis de POOSOLID - Os cinco princípios ágeis de POO
SOLID - Os cinco princípios ágeis de POO
 

Mais 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
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptRodrigo Branas
 

Mais de Rodrigo Branas (13)

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
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScript
 

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