SlideShare a Scribd company logo
1 of 33
Download to read 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

More Related Content

What's hot

Gloo 1.0 - API Gateway Overview and Demo
Gloo 1.0 - API Gateway Overview and DemoGloo 1.0 - API Gateway Overview and Demo
Gloo 1.0 - API Gateway Overview and DemoSolo.io
 
GitOps Toolkit (Cloud Native Nordics Tech Talk)
GitOps Toolkit (Cloud Native Nordics Tech Talk)GitOps Toolkit (Cloud Native Nordics Tech Talk)
GitOps Toolkit (Cloud Native Nordics Tech Talk)Weaveworks
 
[CNCF TAG-Runtime 2022-10-06] Lima
[CNCF TAG-Runtime 2022-10-06] Lima[CNCF TAG-Runtime 2022-10-06] Lima
[CNCF TAG-Runtime 2022-10-06] LimaAkihiro Suda
 
Docker swarm introduction
Docker swarm introductionDocker swarm introduction
Docker swarm introductionEvan Lin
 
如何使用 Xhprof 分析網站效能 (真實案例2)
如何使用 Xhprof 分析網站效能 (真實案例2)如何使用 Xhprof 分析網站效能 (真實案例2)
如何使用 Xhprof 分析網站效能 (真實案例2)Cyril Wang
 
Linux Internals - Kernel/Core
Linux Internals - Kernel/CoreLinux Internals - Kernel/Core
Linux Internals - Kernel/CoreShay Cohen
 
Uyuni - Introduction and how to manage CentOS
Uyuni - Introduction and how to manage CentOSUyuni - Introduction and how to manage CentOS
Uyuni - Introduction and how to manage CentOSPau Garcia Quiles
 
Build Automation using Maven
Build Automation using Maven Build Automation using Maven
Build Automation using Maven Ankit Gubrani
 
High-Performance Networking Using eBPF, XDP, and io_uring
High-Performance Networking Using eBPF, XDP, and io_uringHigh-Performance Networking Using eBPF, XDP, and io_uring
High-Performance Networking Using eBPF, XDP, and io_uringScyllaDB
 
Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)Eric SIBER
 
오픈스택 멀티노드 설치 후기
오픈스택 멀티노드 설치 후기오픈스택 멀티노드 설치 후기
오픈스택 멀티노드 설치 후기영우 김
 
Service Function Chaining in Openstack Neutron
Service Function Chaining in Openstack NeutronService Function Chaining in Openstack Neutron
Service Function Chaining in Openstack NeutronMichelle Holley
 
Practical non blocking microservices in java 8
Practical non blocking microservices in java 8Practical non blocking microservices in java 8
Practical non blocking microservices in java 8Michal Balinski
 
[FR] C'est quoi une API ?
[FR] C'est quoi une API ?[FR] C'est quoi une API ?
[FR] C'est quoi une API ?OVHcloud
 
Linux Ethernet device driver
Linux Ethernet device driverLinux Ethernet device driver
Linux Ethernet device driver艾鍗科技
 

What's hot (20)

Gloo 1.0 - API Gateway Overview and Demo
Gloo 1.0 - API Gateway Overview and DemoGloo 1.0 - API Gateway Overview and Demo
Gloo 1.0 - API Gateway Overview and Demo
 
GitLab
GitLabGitLab
GitLab
 
Kubernetes 101
Kubernetes 101Kubernetes 101
Kubernetes 101
 
GitOps Toolkit (Cloud Native Nordics Tech Talk)
GitOps Toolkit (Cloud Native Nordics Tech Talk)GitOps Toolkit (Cloud Native Nordics Tech Talk)
GitOps Toolkit (Cloud Native Nordics Tech Talk)
 
Fury - Docker Meetup
Fury - Docker MeetupFury - Docker Meetup
Fury - Docker Meetup
 
[CNCF TAG-Runtime 2022-10-06] Lima
[CNCF TAG-Runtime 2022-10-06] Lima[CNCF TAG-Runtime 2022-10-06] Lima
[CNCF TAG-Runtime 2022-10-06] Lima
 
Docker swarm introduction
Docker swarm introductionDocker swarm introduction
Docker swarm introduction
 
如何使用 Xhprof 分析網站效能 (真實案例2)
如何使用 Xhprof 分析網站效能 (真實案例2)如何使用 Xhprof 分析網站效能 (真實案例2)
如何使用 Xhprof 分析網站效能 (真實案例2)
 
Linux Internals - Kernel/Core
Linux Internals - Kernel/CoreLinux Internals - Kernel/Core
Linux Internals - Kernel/Core
 
Uyuni - Introduction and how to manage CentOS
Uyuni - Introduction and how to manage CentOSUyuni - Introduction and how to manage CentOS
Uyuni - Introduction and how to manage CentOS
 
Build Automation using Maven
Build Automation using Maven Build Automation using Maven
Build Automation using Maven
 
High-Performance Networking Using eBPF, XDP, and io_uring
High-Performance Networking Using eBPF, XDP, and io_uringHigh-Performance Networking Using eBPF, XDP, and io_uring
High-Performance Networking Using eBPF, XDP, and io_uring
 
Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)
 
오픈스택 멀티노드 설치 후기
오픈스택 멀티노드 설치 후기오픈스택 멀티노드 설치 후기
오픈스택 멀티노드 설치 후기
 
Service Function Chaining in Openstack Neutron
Service Function Chaining in Openstack NeutronService Function Chaining in Openstack Neutron
Service Function Chaining in Openstack Neutron
 
Distributed fun with etcd
Distributed fun with etcdDistributed fun with etcd
Distributed fun with etcd
 
Practical non blocking microservices in java 8
Practical non blocking microservices in java 8Practical non blocking microservices in java 8
Practical non blocking microservices in java 8
 
Embedded linux network device driver development
Embedded linux network device driver developmentEmbedded linux network device driver development
Embedded linux network device driver development
 
[FR] C'est quoi une API ?
[FR] C'est quoi une API ?[FR] C'est quoi une API ?
[FR] C'est quoi une API ?
 
Linux Ethernet device driver
Linux Ethernet device driverLinux Ethernet device driver
Linux Ethernet device driver
 

Viewers also liked

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
 

Viewers also liked (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
 

Similar to Node.js - #6 - Core Modules - net - Rodrigo Branas

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
 

Similar to Node.js - #6 - Core Modules - net - Rodrigo Branas (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
 

More from 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
 

More from 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
 

Recently uploaded

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfNatalia Granato
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 

Recently uploaded (6)

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 

Node.js - #6 - Core Modules - net - Rodrigo Branas

  • 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