├── .gitignore ├── index.html ├── package-lock.json ├── package.json └── server.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Socket.IO Chat 6 | 7 | 8 | 9 | 10 | 18 | 19 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nodejs-socketio", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "nodejs-socketio", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "socket.io": "^4.7.5" 13 | } 14 | }, 15 | "node_modules/@socket.io/component-emitter": { 16 | "version": "3.1.2", 17 | "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", 18 | "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==" 19 | }, 20 | "node_modules/@types/cookie": { 21 | "version": "0.4.1", 22 | "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", 23 | "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" 24 | }, 25 | "node_modules/@types/cors": { 26 | "version": "2.8.17", 27 | "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", 28 | "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", 29 | "dependencies": { 30 | "@types/node": "*" 31 | } 32 | }, 33 | "node_modules/@types/node": { 34 | "version": "22.5.5", 35 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.5.tgz", 36 | "integrity": "sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==", 37 | "dependencies": { 38 | "undici-types": "~6.19.2" 39 | } 40 | }, 41 | "node_modules/accepts": { 42 | "version": "1.3.8", 43 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 44 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 45 | "dependencies": { 46 | "mime-types": "~2.1.34", 47 | "negotiator": "0.6.3" 48 | }, 49 | "engines": { 50 | "node": ">= 0.6" 51 | } 52 | }, 53 | "node_modules/base64id": { 54 | "version": "2.0.0", 55 | "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", 56 | "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", 57 | "engines": { 58 | "node": "^4.5.0 || >= 5.9" 59 | } 60 | }, 61 | "node_modules/cookie": { 62 | "version": "0.4.2", 63 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", 64 | "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", 65 | "engines": { 66 | "node": ">= 0.6" 67 | } 68 | }, 69 | "node_modules/cors": { 70 | "version": "2.8.5", 71 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", 72 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", 73 | "dependencies": { 74 | "object-assign": "^4", 75 | "vary": "^1" 76 | }, 77 | "engines": { 78 | "node": ">= 0.10" 79 | } 80 | }, 81 | "node_modules/debug": { 82 | "version": "4.3.7", 83 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", 84 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", 85 | "dependencies": { 86 | "ms": "^2.1.3" 87 | }, 88 | "engines": { 89 | "node": ">=6.0" 90 | }, 91 | "peerDependenciesMeta": { 92 | "supports-color": { 93 | "optional": true 94 | } 95 | } 96 | }, 97 | "node_modules/engine.io": { 98 | "version": "6.5.5", 99 | "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", 100 | "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", 101 | "dependencies": { 102 | "@types/cookie": "^0.4.1", 103 | "@types/cors": "^2.8.12", 104 | "@types/node": ">=10.0.0", 105 | "accepts": "~1.3.4", 106 | "base64id": "2.0.0", 107 | "cookie": "~0.4.1", 108 | "cors": "~2.8.5", 109 | "debug": "~4.3.1", 110 | "engine.io-parser": "~5.2.1", 111 | "ws": "~8.17.1" 112 | }, 113 | "engines": { 114 | "node": ">=10.2.0" 115 | } 116 | }, 117 | "node_modules/engine.io-parser": { 118 | "version": "5.2.3", 119 | "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", 120 | "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", 121 | "engines": { 122 | "node": ">=10.0.0" 123 | } 124 | }, 125 | "node_modules/mime-db": { 126 | "version": "1.52.0", 127 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 128 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 129 | "engines": { 130 | "node": ">= 0.6" 131 | } 132 | }, 133 | "node_modules/mime-types": { 134 | "version": "2.1.35", 135 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 136 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 137 | "dependencies": { 138 | "mime-db": "1.52.0" 139 | }, 140 | "engines": { 141 | "node": ">= 0.6" 142 | } 143 | }, 144 | "node_modules/ms": { 145 | "version": "2.1.3", 146 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 147 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 148 | }, 149 | "node_modules/negotiator": { 150 | "version": "0.6.3", 151 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 152 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 153 | "engines": { 154 | "node": ">= 0.6" 155 | } 156 | }, 157 | "node_modules/object-assign": { 158 | "version": "4.1.1", 159 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 160 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 161 | "engines": { 162 | "node": ">=0.10.0" 163 | } 164 | }, 165 | "node_modules/socket.io": { 166 | "version": "4.7.5", 167 | "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz", 168 | "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==", 169 | "dependencies": { 170 | "accepts": "~1.3.4", 171 | "base64id": "~2.0.0", 172 | "cors": "~2.8.5", 173 | "debug": "~4.3.2", 174 | "engine.io": "~6.5.2", 175 | "socket.io-adapter": "~2.5.2", 176 | "socket.io-parser": "~4.2.4" 177 | }, 178 | "engines": { 179 | "node": ">=10.2.0" 180 | } 181 | }, 182 | "node_modules/socket.io-adapter": { 183 | "version": "2.5.5", 184 | "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", 185 | "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", 186 | "dependencies": { 187 | "debug": "~4.3.4", 188 | "ws": "~8.17.1" 189 | } 190 | }, 191 | "node_modules/socket.io-parser": { 192 | "version": "4.2.4", 193 | "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", 194 | "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", 195 | "dependencies": { 196 | "@socket.io/component-emitter": "~3.1.0", 197 | "debug": "~4.3.1" 198 | }, 199 | "engines": { 200 | "node": ">=10.0.0" 201 | } 202 | }, 203 | "node_modules/undici-types": { 204 | "version": "6.19.8", 205 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", 206 | "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" 207 | }, 208 | "node_modules/vary": { 209 | "version": "1.1.2", 210 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 211 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 212 | "engines": { 213 | "node": ">= 0.8" 214 | } 215 | }, 216 | "node_modules/ws": { 217 | "version": "8.17.1", 218 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", 219 | "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", 220 | "engines": { 221 | "node": ">=10.0.0" 222 | }, 223 | "peerDependencies": { 224 | "bufferutil": "^4.0.1", 225 | "utf-8-validate": ">=5.0.2" 226 | }, 227 | "peerDependenciesMeta": { 228 | "bufferutil": { 229 | "optional": true 230 | }, 231 | "utf-8-validate": { 232 | "optional": true 233 | } 234 | } 235 | } 236 | } 237 | } 238 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nodejs-socketio", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "socket.io": "^4.7.5" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | const http = require("http"); 2 | const socketIo = reuire("socket.io"); 3 | 4 | const server = http.createServer(app); 5 | 6 | const io = socketIo(server); 7 | 8 | io.on("connection", (socket) => { 9 | console.log("New client connected"); 10 | 11 | //Listen for 'message' event from any client 12 | socket.on("message", (msg) => { 13 | console.log("Message", msg); 14 | //Broadcasting message to all other clients 15 | io.emit("message", msg); 16 | }); 17 | socket.on("disconnect", () => { 18 | console.log("Client disconnected"); 19 | }); 20 | }); 21 | 22 | // Start the server 23 | const PORT = process.env.PORT || 3000; 24 | server.listen(PORT, () => console.log(`Server running on port ${PORT}`)); 25 | --------------------------------------------------------------------------------