Guías de Make it Real
  • Introduction
  • Preparación
    • Conceptos básicos
    • El editor de texto
    • La línea de comandos
    • Git y Github
  • Git
    • Instalación y configuración
    • Conceptos y comandos esenciales
    • Ignorando archivos y carpetas
    • Trabajando con ramas
    • Repositorios remotos
    • Etiquetas
    • Reescribiendo la historia
    • Stashing
    • Github
  • HTML y CSS
    • Introducción a HTML
    • Introducción a CSS
    • Más elementos de HTML
    • Tablas
    • Formularios
    • El modelo de caja en CSS
    • Fondos (backgrounds)
    • Posicionamiento
    • Selectores CSS
    • Bordes, sombras y gradientes
    • Media Queries
    • Unidades en CSS
    • Flexbox
  • Bootstrap 3
    • Primeros pasos
    • Elementos básicos de HTML
    • Componentes
    • La grilla
    • Personalizando Bootstrap
    • Utilizando plantillas
  • Bootstrap 4
    • Primeros pasos
    • Elementos básicos de HTML
    • Componentes
    • La grilla
    • Clases utilitarias
    • Personalizando Bootstrap
  • Ruby
    • Primeros pasos
    • Tipos y operadores
    • Variables y entrada de usuario
    • Condicionales
    • Ciclos
    • Arreglos
    • Más cadenas de texto
    • Hashes
    • Métodos
    • Manipulación de archivos
    • Gemas
  • Programación Orientada a Objetos en Ruby
    • Clases y objetos
    • Métodos y atributos de clase
    • Herencia
    • Módulos
    • Excepciones
  • JavaScript I
    • Primeros pasos
    • Tipos y operadores
    • Variables
    • Condicionales
    • Ciclos
    • Arreglos
    • Más cadenas de texto
    • Funciones
    • Objetos literales
    • Manipulación de archivos
  • JavaScript en el navegador
    • Primeros pasos
    • Manipulando HTML
    • Escuchando eventos
    • Local Storage
    • History API
    • Canvas
    • Notificaciones Web
    • Audio y Video
    • Arrastrar y soltar
    • JSON
    • Realizando peticiones HTTP
  • jQuery
    • Primeros pasos
    • Manipulando HTML
    • Escuchando eventos
    • Plugins
    • Realizando peticiones con AJAX
  • JavaScript II
    • Prototipos
    • Librerías (Node.js)
    • ES6
    • Uso de this (call, apply, bind)
    • Programación funcional
    • Scope, hoisting, closures
    • Programación asincrónica
    • Testing
  • HTTP y Sinatra
    • Primeros pasos con Sinatra
    • El protocolo HTTP
    • Rutas
    • Formularios
    • Cookies y sesión
  • Bases de datos
    • Bases de datos relacionales
    • SQL
    • DDL
    • MongoDB
  • Ruby on Rails I
    • Primeros pasos
    • Arquitectura
    • Rutas
    • Layouts y rendering
    • ActiveRecord - Modelos
    • ActiveRecord - Migraciones
    • ActiveRecord - Validaciones
    • ActiveRecord - Asociaciones
    • ActiveRecord - Scopes
    • ActiveRecord - Callbacks
    • Recursos REST
    • Formularios
    • Autenticación con Devise
    • Sass y Bootstrap
    • Envío de correos
    • Carga de imágenes
    • Seeds
    • Heroku
  • Ruby on Rails II
    • Usando JavaScript (y jQuery) en Rails
    • Testing en Ruby
    • Testing en Rails
    • Creando una Web API
    • Web Sockets
  • Express.js
    • Primeros Pasos
    • El protocolo HTTP
    • Rutas
    • Vistas
    • Middlewares y manejo de errores
    • Formularios
    • Cookies y sesión
  • Express.js II
    • Mongoose
    • Web Sockets
    • Autenticación
    • Envío de correos
    • Cargar imágenes
    • Deployment
    • Testing
    • Creando una Web API
  • React
    • Primeros pasos
    • JSX
    • Componentes
    • Más sobre estado
    • Formularios
    • Peticiones HTTP con Axios
    • React Hooks
    • React Context
    • React Bootstrap
    • React Router
    • Carga de Imágenes
    • Testing
    • Estructura de carpetas
    • Componentes de clase
  • Redux
    • Primeros pasos
    • Action creators
    • Usando la librería react-redux
    • Middlewares
    • Operaciones asincrónicas con redux-thunk
    • Combinando funciones reductoras
    • Testing
    • Redux Tool Kit
  • Algoritmos
    • Describiendo un algoritmo
    • Complejidad (Big-O)
    • Estructuras de datos
    • Recursión
    • Ordenamiento
    • Búsqueda
    • Programación dinámica
  • Python
    • Primeros Pasos
    • Tipos y Variables
    • Funciones
    • Control de Flujo
    • Listas
    • Ciclos
    • Diccionarios, Tuplas y Sets
  • NumPy
    • Primeros Pasos
    • Arreglos
    • Arreglos Multidimensionales
    • Estadística con NumPy
    • Distribución Estadística
  • Pandas
    • Primeros Pasos
    • Inspección y Selección de Datos
    • Modificando Dataframes
    • La Función Lambda
    • Aggregates en Pandas
    • Múltiples Tablas
Powered by GitBook
On this page
  • El cliente
  • El servidor
  • Socket.io
  1. Express.js II

Web Sockets

Web Sockets es una tecnología que permite crear aplicaciones capaces de recibir información del servidor y actualizarse en tiempo real, sin necesidad de refrescar la página.

La forma en que funciona Web Sockets es que el navegador, a través de JavaScript, abre una conexión HTTP con el servidor y maniente esa conexión abierta para que el servidor pueda enviarle información al navegador en cualquier momento.

Para que Web Sockets funcione se debe escribir código tanto en el cliente (con JavaScript) como en el servidor (dependiendo del lenguaje que se utilice).

El cliente

La mayoría de navegadores hoy soportan Web Sockets. El código JavaScript necesario para abrir una conexión y escuchar mensajes del servidor es el siguiente:

// abrimos el Web Socket
var ws = new WebSocket("ws://localhost:3001/chat");

ws.onopen = function() {
  // el Web Socket está abierto, podemos empezar a enviar mensajes
  // con el método send
  ws.send("Un mensaje");  
};

ws.onmessage = function(e) {
  // esto se invoca automáticamente cuando recibimos un mensaje
  console.log(e.data);
};

ws.onclose = function() {
  // la conexión fue cerrada
}

El servidor

Para instalar la librería utiliza NPM o Yarn. Con Yarn utiliza el siguiente comando:

$ yarn add express-ws

Crea un archivo llamado app.js y escribe lo siguiente:

var app = require('express')();
var ws = require('express-ws')(app);

app.ws("/chat", function(ws, req) {
  ws.on("open", function() {
    // recibimos una nueva conexión
  });

  ws.on("message", function(data) {
    // recibimos un mensaje
    ws.send(data);
  });

  ws.on("close", function() {
    // un cliente cerró la conexión
  });
});

app.listen(3001, function() {
  console.log('listening on http://localhost:3001/')
});

Algunas alternativas en otros lenguajes de programación incluyen:

Socket.io

  • Reconexión automática.

  • Canales (rooms) y eventos.

  • Transimisión de imagen, audio y video.

  • Soporte para navegadores antiguos (p.e. IE9 e IE8).

Veamos un ejemplo. En el cliente debes incluir la librería de Socket.io:

<script src="socket.io.js"></script>
<script>
  var socket = io('http://localhost:3001/chat');

  socket.on("connect", function() {
    // podemos enviar mensajes con el método emit
    socket.emit("message", "nuevo mensaje");
  });

  socket.on("message", function (data) {
    console.log(data);
  });
</script>

En el servidor:

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res){
  res.sendFile(__dirname + '/index.html');
});

io.on('connection', function(socket){
  console.log('a user connected');

  socket.on('message', function(msg){
    io.emit('message', msg);
  });

  socket.on('disconnect', function(){
    console.log('user disconnected');
  });
});

http.listen(3001, function(){
  console.log('listening on *:3000');
});
PreviousMongooseNextAutenticación

Last updated 2 years ago

El servidor se puede escribir en cualquier lenguaje de programación (Web Sockets es una tecnología independiente del lenguaje). Para este ejemplo vamos a utilizar Node.js con una librería llamada .

Ruby -

Ruby on Rails -

Python -

Java -

es una librería de Node.js para desarrollar aplicaciones con WebSockets que también incluye una librería para el cliente.

El desarrollo con es parecido a lo que ya hemos visto, pero Socket.io ofrece varias ventajas y funcionalidades interesantes:

express-ws
Faye's WebSockets
ActionCable
websockets
JSR-356
Socket.io
Socket.io