合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
##聊天室例子 提示:readline promat()解释 http://blog.csdn.net/zgljl2012/article/details/48321171 **server.js** ```js // 建立一个Socket服务端 const net = require('net'); // 用于存储所有的连接 var clients = []; var server = net.createServer(function(socket) { // socket.setEncoding('utf8'); // 哪个客户端与我连接socket就是谁 clients.push(socket); console.log("Welcome " + socket.remoteAddress + " to 2080 chatroom"); // 触发多次 socket.on('data', clientData).on('error', function(err) { clients.splice(clients.indexOf(socket), 1); console.log(socket.remoteAddress +"下线了 当前在线" + clients.length); }); }); // 广播消息 function boardcast(signal) { // console.log(signal); // 肯定有用户名和消息 var username = signal.from; var message = signal.message; // 我们要发给客户端的东西 var send = { procotol: signal.procotol, from: username, message: message }; // 广播消息 clients.forEach(function(client) { client.write(JSON.stringify(send)); }); } // 有任何客户端发消息都会触发 function clientData(chunk) { // chunk:boardcast|张三|弄啥咧! // chunk:{"procotol":"boardcast","from":"张三","message":"弄啥咧!"} // chunk:{"procotol":"p2p","from":"张三","to":"李四","message":"弄啥咧!"} try { var signal = JSON.parse(chunk.toString().trim()); var procotol = signal.procotol; switch (procotol) { case 'boardcast': boardcast(signal); break; // case 'p2p': // p2p(signal); // break; // case 'shake': // shake(signal); // break; default: socket.write('弄啥咧!你要干的我干不了'); break; } } catch (error) { socket.write('弄啥咧!'); } } var port = 2080; server.listen(port, function(err) { if (err) { console.log('端口被占用'); return false; } console.log("服务端正常启动监听【" + port + "】端口"); }); ``` **client.js** ```js // 客户端 const net = require('net'); const readline = require('readline'); const rl = readline.createInterface(process.stdin, process.stdout); rl.question('What is your name? ', function(name) { name = name.trim(); if (!name) { throw new Error('没名字还出来混。。'); } // 创建于服务端的连接 var server = net.connect({ port: 2080, host: '192.168.xx.xx' }, () => { console.log("Welcome " + name + " to 2080 chatroom"); // 监听服务端发过来的数据 server.on('data', function(chunk) { try { var signal = JSON.parse(chunk.toString().trim()); var procotol = signal.procotol; switch (procotol) { case 'boardcast': console.log('\nboardcast[' + signal.from + ']> ' + signal.message + '\n'); rl.prompt(); break; default: server.write('弄啥咧!你要干的我干不了'); break; } } catch (error) { server.write('弄啥咧!'); } }); rl.setPrompt(name + '> '); // 此时没有写到控制台 rl.prompt(); // 写入控制台 // 输入一行内容敲回车 rl.on('line', function(line) { // {"procotol":"boardcast","from":"张三","message":"弄啥咧!"} var send = { procotol: 'boardcast', from: name, message: line.toString().trim() }; server.write(JSON.stringify(send)); rl.prompt(); }); rl.on('close', function() { // console.log('Have a great day!'); // process.exit(0); }); }); }); ```