Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

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

643 Aufrufe

Veröffentlicht am

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

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

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

×