curl http://npmjs.org/install.sh | sh npm install socket.io
// 8080- - 80 http- var io = require('socket.io').listen(8080); // - production' io.set('log level', 1); // io.sockets.on('connection', function (socket) { // .. - 5 ID var ID = (socket.id).toString().substr(0, 5); var time = (new Date).toLocaleTimeString(); // , socket.json.send({'event': 'connected', 'name': ID, 'time': time}); // , socket.broadcast.json.send({'event': 'userJoined', 'name': ID, 'time': time}); // socket.on('message', function (msg) { var time = (new Date).toLocaleTimeString(); // , socket.json.send({'event': 'messageSent', 'name': ID, 'text': msg, 'time': time}); // socket.broadcast.json.send({'event': 'messageReceived', 'name': ID, 'text': msg, 'time': time}) }); // - socket.on('disconnect', function() { var time = (new Date).toLocaleTimeString(); io.sockets.json.send({'event': 'userSplit', 'name': ID, 'time': time}); }); });
<!doctype html> <html> <head> <meta charset="utf-8"> <title></title> <link href="style.css" rel="stylesheet"> <script src="http://46.182.31.65:8080/socket.io/socket.io.js"></script> <script src="client.js"></script> </head> <body> <div id="log"></div><br> <input type="text" id="input" autofocus><input type="submit" id="send" value="Send"> </body> </html>
#log { width: 590px; height: 290px; border: 1px solid rgb(192, 192, 192); padding: 5px; margin-bottom: 5px; font: 11pt 'Palatino Linotype'; overflow: auto; } #input { width: 550px; } #send { width: 50px; } .in { color: rgb(0, 0, 0); } .out { color: rgb(0, 0, 0); } .time { color: rgb(144, 144, 144); font: 10pt 'Courier New'; } .system { color: rgb(165, 42, 42); } .user { color: rgb(25, 25, 112); }
// strings = { 'connected': '[sys][time]%time%[/time]: [user]%name%[/user].[/sys]', 'userJoined': '[sys][time]%time%[/time]: [user]%name%[/user] .[/sys]', 'messageSent': '[out][time]%time%[/time]: [user]%name%[/user]: %text%[/out]', 'messageReceived': '[in][time]%time%[/time]: [user]%name%[/user]: %text%[/in]', 'userSplit': '[sys][time]%time%[/time]: [user]%name%[/user] .[/sys]' }; window.onload = function() { // ; websockets - , xhr if (navigator.userAgent.toLowerCase().indexOf('chrome') != -1) { socket = io.connect('http://46.182.31.65:8080', {'transports': ['xhr-polling']}); } else { socket = io.connect('http://46.182.31.65:8080'); } socket.on('connect', function () { socket.on('message', function (msg) { // , , document.querySelector('#log').innerHTML += strings[msg.event].replace(/\[([az]+)\]/g, '<span class="$1">').replace(/\[\/[az]+\]/g, '</span>').replace(/\%time\%/, msg.time).replace(/\%name\%/, msg.name).replace(/\%text\%/, unescape(msg.text).replace('<', '<').replace('>', '>')) + '<br>'; // document.querySelector('#log').scrollTop = document.querySelector('#log').scrollHeight; }); // <Enter> document.querySelector('#input').onkeypress = function(e) { if (e.which == '13') { // input', escape- socket.send(escape(document.querySelector('#input').value)); // input document.querySelector('#input').value = ''; } }; document.querySelector('#send').onclick = function() { socket.send(escape(document.querySelector('#input').value)); document.querySelector('#input').value = ''; }; }); };
node server.js > output.log &
Source: https://habr.com/ru/post/127525/