Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

618 views

Published on

No sexto episódio da série sobre Node.js vamos conhecer um dos core modules mais antigos da plataforma, responsável por viabilizar a comunicação de dados com base no protocolo TCP.

Para isso, vamos desenvolver um chat, aprendendo a conectar clientes ao servidor, trocando mensagens e tratando os principais eventos como o connect, data e end.

https://www.youtube.com/watch?v=sx36tuCzUOE

Published in: Technology
  • Be the first to comment

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

  1. 1. Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.br Core Modules - net
  2. 2. É possível interagir com diversos tipos de protocolos baseados em TCP
  3. 3. HTTP, SMTP, FTP, POP3, IRC e muitos outros
  4. 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. 5. Trata problemas como a perda, duplicação e ainda garante a ordenação dos pacotes
  6. 6. Vamos criar um chat com suporte para múltiplos clientes
  7. 7. Começando pelo servidor
  8. 8. Importando o módulo net server.js 1. var net = require('net');
  9. 9. Criando um servidor server.js 1. var net = require('net'); 2. 3. net.createServer();
  10. 10. Escutando na porta 3000 server.js 1. var net = require('net'); 2. 3. net.createServer().listen(3000);
  11. 11. Criando o cliente
  12. 12. Importando o módulo net client.js 1. var net = require('net');
  13. 13. Conectando na porta 3000 client.js 1. var net = require('net'); 2. 3. net.connect(3000);
  14. 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. 15. Trocando as primeiras mensagens entre o cliente e o servidor
  16. 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. 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. 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. 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);
  20. 20. Trocando mensagens entre os clientes
  21. 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. 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. 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. 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. 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. 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);
  27. 27. Identificando cada cliente
  28. 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. 29. Encerrando a comunicação entre o cliente e o servidor
  30. 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. 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. 32. Confira toda a documentação em https://nodejs.org/api/net.html
  33. 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

×