├── .env ├── .gitignore ├── README.md ├── index.js ├── models ├── server.js └── sockets.js ├── package-lock.json ├── package.json └── public └── index.html /.env: -------------------------------------------------------------------------------- 1 | PORT=8080 -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Socket Server 2 | 3 | Este backend contiene todo lo necesario para configurar un servidor de express + socket.io. 4 | 5 | Cualquier conexión adicional de sockets, se puede hacer en el archivo ```models/sockets.js``` y cualquier middleware adicional de express, se puede realizar en el archivo ```models/server.js``` -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | // Server Model: Contiene todo el servidor de express + socket.io configurado 2 | const Server = require('./models/server'); 3 | 4 | // Paquete para leer y establecer las variables de entorno 5 | require('dotenv').config(); 6 | 7 | 8 | // Inicializar la instancia del server 9 | const server = new Server(); 10 | 11 | // Ejecutar el server 12 | server.execute(); 13 | 14 | 15 | -------------------------------------------------------------------------------- /models/server.js: -------------------------------------------------------------------------------- 1 | // Servidor de Express 2 | const express = require('express'); 3 | const http = require('http'); 4 | const socketio = require('socket.io'); 5 | const path = require('path'); 6 | 7 | const Sockets = require('./sockets'); 8 | 9 | class Server { 10 | 11 | constructor() { 12 | 13 | this.app = express(); 14 | this.port = process.env.PORT; 15 | 16 | // Http server 17 | this.server = http.createServer( this.app ); 18 | 19 | // Configuraciones de sockets 20 | this.io = socketio( this.server, { /* configuraciones */ } ); 21 | } 22 | 23 | middlewares() { 24 | // Desplegar el directorio público 25 | this.app.use( express.static( path.resolve( __dirname, '../public' ) ) ); 26 | } 27 | 28 | // Esta configuración se puede tener aquí o como propieda de clase 29 | // depende mucho de lo que necesites 30 | configurarSockets() { 31 | new Sockets( this.io ); 32 | } 33 | 34 | execute() { 35 | 36 | // Inicializar Middlewares 37 | this.middlewares(); 38 | 39 | // Inicializar sockets 40 | this.configurarSockets(); 41 | 42 | // Inicializar Server 43 | this.server.listen( this.port, () => { 44 | console.log('Server corriendo en puerto:', this.port ); 45 | }); 46 | } 47 | 48 | } 49 | 50 | 51 | module.exports = Server; -------------------------------------------------------------------------------- /models/sockets.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | class Sockets { 4 | 5 | constructor( io ) { 6 | 7 | this.io = io; 8 | 9 | this.socketEvents(); 10 | } 11 | 12 | socketEvents() { 13 | // On connection 14 | this.io.on('connection', ( socket ) => { 15 | 16 | // Escuchar evento: mensaje-to-server 17 | socket.on('mensaje-to-server', ( data ) => { 18 | console.log( data ); 19 | 20 | this.io.emit('mensaje-from-server', data ); 21 | }); 22 | 23 | 24 | }); 25 | } 26 | 27 | 28 | } 29 | 30 | 31 | module.exports = Sockets; -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "01-socket-server-basic", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "accepts": { 8 | "version": "1.3.7", 9 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", 10 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", 11 | "requires": { 12 | "mime-types": "~2.1.24", 13 | "negotiator": "0.6.2" 14 | } 15 | }, 16 | "array-flatten": { 17 | "version": "1.1.1", 18 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 19 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 20 | }, 21 | "base64id": { 22 | "version": "2.0.0", 23 | "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", 24 | "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" 25 | }, 26 | "body-parser": { 27 | "version": "1.19.0", 28 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", 29 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", 30 | "requires": { 31 | "bytes": "3.1.0", 32 | "content-type": "~1.0.4", 33 | "debug": "2.6.9", 34 | "depd": "~1.1.2", 35 | "http-errors": "1.7.2", 36 | "iconv-lite": "0.4.24", 37 | "on-finished": "~2.3.0", 38 | "qs": "6.7.0", 39 | "raw-body": "2.4.0", 40 | "type-is": "~1.6.17" 41 | }, 42 | "dependencies": { 43 | "debug": { 44 | "version": "2.6.9", 45 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 46 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 47 | "requires": { 48 | "ms": "2.0.0" 49 | } 50 | }, 51 | "ms": { 52 | "version": "2.0.0", 53 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 54 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 55 | } 56 | } 57 | }, 58 | "bytes": { 59 | "version": "3.1.0", 60 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", 61 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" 62 | }, 63 | "component-emitter": { 64 | "version": "1.3.0", 65 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", 66 | "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" 67 | }, 68 | "content-disposition": { 69 | "version": "0.5.3", 70 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", 71 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", 72 | "requires": { 73 | "safe-buffer": "5.1.2" 74 | } 75 | }, 76 | "content-type": { 77 | "version": "1.0.4", 78 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 79 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 80 | }, 81 | "cookie": { 82 | "version": "0.4.1", 83 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", 84 | "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" 85 | }, 86 | "cookie-signature": { 87 | "version": "1.0.6", 88 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 89 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 90 | }, 91 | "cors": { 92 | "version": "2.8.5", 93 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", 94 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", 95 | "requires": { 96 | "object-assign": "^4", 97 | "vary": "^1" 98 | } 99 | }, 100 | "debug": { 101 | "version": "4.1.1", 102 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 103 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 104 | "requires": { 105 | "ms": "^2.1.1" 106 | } 107 | }, 108 | "depd": { 109 | "version": "1.1.2", 110 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 111 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 112 | }, 113 | "destroy": { 114 | "version": "1.0.4", 115 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 116 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 117 | }, 118 | "dotenv": { 119 | "version": "8.2.0", 120 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", 121 | "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" 122 | }, 123 | "ee-first": { 124 | "version": "1.1.1", 125 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 126 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 127 | }, 128 | "encodeurl": { 129 | "version": "1.0.2", 130 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 131 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 132 | }, 133 | "engine.io": { 134 | "version": "4.0.2", 135 | "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-4.0.2.tgz", 136 | "integrity": "sha512-sumdttqWLNjbuSMOSgDdL2xiEld9s5QZDk9VLyr4e28o+lzNNADhU3qpQDAY7cm2VZH0Otw/U0fL8mEjZ6kBMg==", 137 | "requires": { 138 | "accepts": "~1.3.4", 139 | "base64id": "2.0.0", 140 | "cookie": "~0.4.1", 141 | "cors": "~2.8.5", 142 | "debug": "~4.1.0", 143 | "engine.io-parser": "~4.0.0", 144 | "ws": "^7.1.2" 145 | } 146 | }, 147 | "engine.io-parser": { 148 | "version": "4.0.1", 149 | "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.1.tgz", 150 | "integrity": "sha512-v5aZK1hlckcJDGmHz3W8xvI3NUHYc9t8QtTbqdR5OaH3S9iJZilPubauOm+vLWOMMWzpE3hiq92l9lTAHamRCg==" 151 | }, 152 | "escape-html": { 153 | "version": "1.0.3", 154 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 155 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 156 | }, 157 | "etag": { 158 | "version": "1.8.1", 159 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 160 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 161 | }, 162 | "express": { 163 | "version": "4.17.1", 164 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", 165 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", 166 | "requires": { 167 | "accepts": "~1.3.7", 168 | "array-flatten": "1.1.1", 169 | "body-parser": "1.19.0", 170 | "content-disposition": "0.5.3", 171 | "content-type": "~1.0.4", 172 | "cookie": "0.4.0", 173 | "cookie-signature": "1.0.6", 174 | "debug": "2.6.9", 175 | "depd": "~1.1.2", 176 | "encodeurl": "~1.0.2", 177 | "escape-html": "~1.0.3", 178 | "etag": "~1.8.1", 179 | "finalhandler": "~1.1.2", 180 | "fresh": "0.5.2", 181 | "merge-descriptors": "1.0.1", 182 | "methods": "~1.1.2", 183 | "on-finished": "~2.3.0", 184 | "parseurl": "~1.3.3", 185 | "path-to-regexp": "0.1.7", 186 | "proxy-addr": "~2.0.5", 187 | "qs": "6.7.0", 188 | "range-parser": "~1.2.1", 189 | "safe-buffer": "5.1.2", 190 | "send": "0.17.1", 191 | "serve-static": "1.14.1", 192 | "setprototypeof": "1.1.1", 193 | "statuses": "~1.5.0", 194 | "type-is": "~1.6.18", 195 | "utils-merge": "1.0.1", 196 | "vary": "~1.1.2" 197 | }, 198 | "dependencies": { 199 | "cookie": { 200 | "version": "0.4.0", 201 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", 202 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" 203 | }, 204 | "debug": { 205 | "version": "2.6.9", 206 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 207 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 208 | "requires": { 209 | "ms": "2.0.0" 210 | } 211 | }, 212 | "ms": { 213 | "version": "2.0.0", 214 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 215 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 216 | } 217 | } 218 | }, 219 | "finalhandler": { 220 | "version": "1.1.2", 221 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", 222 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", 223 | "requires": { 224 | "debug": "2.6.9", 225 | "encodeurl": "~1.0.2", 226 | "escape-html": "~1.0.3", 227 | "on-finished": "~2.3.0", 228 | "parseurl": "~1.3.3", 229 | "statuses": "~1.5.0", 230 | "unpipe": "~1.0.0" 231 | }, 232 | "dependencies": { 233 | "debug": { 234 | "version": "2.6.9", 235 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 236 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 237 | "requires": { 238 | "ms": "2.0.0" 239 | } 240 | }, 241 | "ms": { 242 | "version": "2.0.0", 243 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 244 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 245 | } 246 | } 247 | }, 248 | "forwarded": { 249 | "version": "0.1.2", 250 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 251 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 252 | }, 253 | "fresh": { 254 | "version": "0.5.2", 255 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 256 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 257 | }, 258 | "http-errors": { 259 | "version": "1.7.2", 260 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", 261 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", 262 | "requires": { 263 | "depd": "~1.1.2", 264 | "inherits": "2.0.3", 265 | "setprototypeof": "1.1.1", 266 | "statuses": ">= 1.5.0 < 2", 267 | "toidentifier": "1.0.0" 268 | } 269 | }, 270 | "iconv-lite": { 271 | "version": "0.4.24", 272 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 273 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 274 | "requires": { 275 | "safer-buffer": ">= 2.1.2 < 3" 276 | } 277 | }, 278 | "inherits": { 279 | "version": "2.0.3", 280 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 281 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 282 | }, 283 | "ipaddr.js": { 284 | "version": "1.9.1", 285 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 286 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 287 | }, 288 | "media-typer": { 289 | "version": "0.3.0", 290 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 291 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 292 | }, 293 | "merge-descriptors": { 294 | "version": "1.0.1", 295 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 296 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 297 | }, 298 | "methods": { 299 | "version": "1.1.2", 300 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 301 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 302 | }, 303 | "mime": { 304 | "version": "1.6.0", 305 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 306 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 307 | }, 308 | "mime-db": { 309 | "version": "1.44.0", 310 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", 311 | "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" 312 | }, 313 | "mime-types": { 314 | "version": "2.1.27", 315 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", 316 | "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", 317 | "requires": { 318 | "mime-db": "1.44.0" 319 | } 320 | }, 321 | "ms": { 322 | "version": "2.1.2", 323 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 324 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 325 | }, 326 | "negotiator": { 327 | "version": "0.6.2", 328 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", 329 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" 330 | }, 331 | "object-assign": { 332 | "version": "4.1.1", 333 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 334 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 335 | }, 336 | "on-finished": { 337 | "version": "2.3.0", 338 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 339 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 340 | "requires": { 341 | "ee-first": "1.1.1" 342 | } 343 | }, 344 | "parseurl": { 345 | "version": "1.3.3", 346 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 347 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 348 | }, 349 | "path-to-regexp": { 350 | "version": "0.1.7", 351 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 352 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 353 | }, 354 | "proxy-addr": { 355 | "version": "2.0.6", 356 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", 357 | "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", 358 | "requires": { 359 | "forwarded": "~0.1.2", 360 | "ipaddr.js": "1.9.1" 361 | } 362 | }, 363 | "qs": { 364 | "version": "6.7.0", 365 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", 366 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" 367 | }, 368 | "range-parser": { 369 | "version": "1.2.1", 370 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 371 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 372 | }, 373 | "raw-body": { 374 | "version": "2.4.0", 375 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", 376 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", 377 | "requires": { 378 | "bytes": "3.1.0", 379 | "http-errors": "1.7.2", 380 | "iconv-lite": "0.4.24", 381 | "unpipe": "1.0.0" 382 | } 383 | }, 384 | "safe-buffer": { 385 | "version": "5.1.2", 386 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 387 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 388 | }, 389 | "safer-buffer": { 390 | "version": "2.1.2", 391 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 392 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 393 | }, 394 | "send": { 395 | "version": "0.17.1", 396 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", 397 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", 398 | "requires": { 399 | "debug": "2.6.9", 400 | "depd": "~1.1.2", 401 | "destroy": "~1.0.4", 402 | "encodeurl": "~1.0.2", 403 | "escape-html": "~1.0.3", 404 | "etag": "~1.8.1", 405 | "fresh": "0.5.2", 406 | "http-errors": "~1.7.2", 407 | "mime": "1.6.0", 408 | "ms": "2.1.1", 409 | "on-finished": "~2.3.0", 410 | "range-parser": "~1.2.1", 411 | "statuses": "~1.5.0" 412 | }, 413 | "dependencies": { 414 | "debug": { 415 | "version": "2.6.9", 416 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 417 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 418 | "requires": { 419 | "ms": "2.0.0" 420 | }, 421 | "dependencies": { 422 | "ms": { 423 | "version": "2.0.0", 424 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 425 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 426 | } 427 | } 428 | }, 429 | "ms": { 430 | "version": "2.1.1", 431 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 432 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" 433 | } 434 | } 435 | }, 436 | "serve-static": { 437 | "version": "1.14.1", 438 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", 439 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", 440 | "requires": { 441 | "encodeurl": "~1.0.2", 442 | "escape-html": "~1.0.3", 443 | "parseurl": "~1.3.3", 444 | "send": "0.17.1" 445 | } 446 | }, 447 | "setprototypeof": { 448 | "version": "1.1.1", 449 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 450 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" 451 | }, 452 | "socket.io": { 453 | "version": "3.0.1", 454 | "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-3.0.1.tgz", 455 | "integrity": "sha512-oVYbCQ4sCwm4wVi+f1bsE3YFXcvd6b4JjVP8D7IZnQqBeJOKX9XrdgJWSbXqBEqUXPY3jdTqb1M3s4KFTa/IHg==", 456 | "requires": { 457 | "accepts": "~1.3.4", 458 | "base64id": "~2.0.0", 459 | "debug": "~4.1.0", 460 | "engine.io": "~4.0.0", 461 | "socket.io-adapter": "~2.0.3", 462 | "socket.io-parser": "~4.0.1" 463 | } 464 | }, 465 | "socket.io-adapter": { 466 | "version": "2.0.3", 467 | "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.0.3.tgz", 468 | "integrity": "sha512-2wo4EXgxOGSFueqvHAdnmi5JLZzWqMArjuP4nqC26AtLh5PoCPsaRbRdah2xhcwTAMooZfjYiNVNkkmmSMaxOQ==" 469 | }, 470 | "socket.io-parser": { 471 | "version": "4.0.1", 472 | "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.1.tgz", 473 | "integrity": "sha512-5JfNykYptCwU2lkOI0ieoePWm+6stEhkZ2UnLDjqnE1YEjUlXXLd1lpxPZ+g+h3rtaytwWkWrLQCaJULlGqjOg==", 474 | "requires": { 475 | "component-emitter": "~1.3.0", 476 | "debug": "~4.1.0" 477 | } 478 | }, 479 | "statuses": { 480 | "version": "1.5.0", 481 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 482 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 483 | }, 484 | "toidentifier": { 485 | "version": "1.0.0", 486 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 487 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" 488 | }, 489 | "type-is": { 490 | "version": "1.6.18", 491 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 492 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 493 | "requires": { 494 | "media-typer": "0.3.0", 495 | "mime-types": "~2.1.24" 496 | } 497 | }, 498 | "unpipe": { 499 | "version": "1.0.0", 500 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 501 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 502 | }, 503 | "utils-merge": { 504 | "version": "1.0.1", 505 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 506 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 507 | }, 508 | "vary": { 509 | "version": "1.1.2", 510 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 511 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 512 | }, 513 | "ws": { 514 | "version": "7.4.0", 515 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz", 516 | "integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ==" 517 | } 518 | } 519 | } 520 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "01-socket-server-basic", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "dev": "nodemon index.js", 9 | "start": "node index.js" 10 | }, 11 | "author": "", 12 | "license": "ISC", 13 | "dependencies": { 14 | "dotenv": "^8.2.0", 15 | "express": "^4.17.1", 16 | "socket.io": "^3.0.1" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Socket Server 7 | 8 | 9 | 10 | 11 | 12 |

Acceso denegado

13 |
14 | 15 | 16 | 17 | 32 | 33 | 34 | 35 | --------------------------------------------------------------------------------