Nodejs开发Socket.IO聊天室0821
2016-08-21 21:49
363 查看
长连接
socket实时聊天技术
socket.io
1、新建一个名为server.js的服务端JS文件
2、 新建一个名为client.js的JS文件
作业:nodejs 基于浏览器的实时聊天。
socket实时聊天技术
socket.io
1、新建一个名为server.js的服务端JS文件
var net = require('net'); var server = net.createServer((socket) => { var time = getTime(); //加入一个标志 //加入到客户列表中 var name = clients.add( socket ); //接收客户发过来的信息 socket.on('data', function(data) { // guangbo(data, socket);// 接受来自客户端的信息 console.log('收到数据啦---' ); console.log(data.toString()); //发送给所有人 clients.sendAll(socket,data); }); //客户关闭了连接 socket.on('close', function(data) { console.log('客户走了~: ' + socket.remoteAddress + ' ' + socket.remotePort); //删除客户 clients.del(socket); //发送给所有人 clients.sendAll(socket, '有人走了!当前聊天人数:' + clients.length()); }); console.log('有人连了,客户端数量:'+ clients.length() ); console.log('有人连了,客户端数量:'+ clients.length() ); socket.write(time +' 欢迎进来聊天~ ' + name + '!\n' + '当前聊天人数:' + clients.length()); clients.sendAll(socket, '有人进来了!当前聊天人数:' + clients.length()); }).on('error', (err) => { // handle errors here throw err; }); clients = new Object(); clients.list = []; //添加客户端到客户列表 /* socket 当前的连接 */ clients.add = function(socket){ socket.name = socket.remoteAddress + ':' + socket.remotePort; this.list.push(socket); return socket.name; } //从客户端列表删除 /* socket 当前的socket */ clients.del = function(socket){ console.log('用户要走了!删除他!!'); for(var i=0 ; i < this.list.length ; i++){ if(socket == this.list[i]){ console.log('用户要走了!已经删除了~~~'); this.list.splice(i,1); } } } //把信息发给全部人 /* socket 当前的连接 data 要发送的数据 */ clients.sendAll = function(socket,data){ console.log('开始发送给全部人啦!!'); for(var i=0 ; i < this.list.length ; i++){ if(socket !== this.list[i]){ var o = this.list[i]; //检查socket是否可以写 if (o.writable) { console.log('发送给:' + o.name); o.write('-----\n' + getTime() + '\n' + socket.name + '说:\n'); o.write(data); o.write('-----'); } else { console.log('socket 失效了:' + o.name); //socket断开了什么的,就不能发送啦,需要删除这个连接 this.del(o); } } } } clients.length = function(){ return this.list.length; } // 对Date的扩展,将 Date 转化为指定格式的String // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符, // 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字) // 例子: // (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423 // (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18 Date.prototype.Format = function (fmt) { //author: meizz var o = { "M+": this.getMonth() + 1, //月份 "d+": this.getDate(), //日 "h+": this.getHours(), //小时 "m+": this.getMinutes(), //分 "s+": this.getSeconds(), //秒 "q+": Math.floor((this.getMonth() + 3) / 3), //季度 "S": this.getMilliseconds() //毫秒 }; if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); for (var k in o) if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); return fmt; } function getTime(){ return new Date().Format("yyyy-MM-dd hh:mm:ss"); } //开启聊天服务器~~ server.listen({ host: 'localhost', port: 8888, exclusive: true });
2、 新建一个名为client.js的JS文件
const net = require('net'); const client = net.connect({port: 8888}, () => { // 'connect' listener console.log('连上去了~!'); }); client.on('data', (data) => { console.log('收到数据'); console.log(data.toString()); }); client.on('end', () => { console.log('断开了'); rl.close(); }); const readline = require('readline'); const rl = readline.createInterface(process.stdin, process.stdout); console.log('多人聊天室'); // console.log('1.进入聊天室'); console.log('88.不聊了走人~'); rl.setPrompt('随便说点什么吧~> '); rl.prompt(); rl.on('line', (line) => { switch(line.trim()) { // case '1': // console.log('连接聊天服务中'); // break; case '88': console.log('欢迎下次再来~玩耍哦~~!'); rl.close(); break; default: s=line.trim(); client.write(s+'\r\n'); rl.setPrompt('随便说点什么吧~> '); rl.prompt(); break; } }).on('close', () => { console.log('记得回来继续聊.'); process.exit(0); });
作业:nodejs 基于浏览器的实时聊天。
相关文章推荐
- nodejs+socket.io聊天室
- 即时通讯之Socket.IO的学习,及使用nodejs 搭建websocket 聊天室
- nodejs 基于socket.io实现聊天室
- 基于react+react-router+redux+socket.io+koa开发一个聊天室
- 使用 Socket.IO 开发聊天室
- AngularJS+Node.js+socket.io 开发在线聊天室
- 基于react+react-router+redux+socket.io+koa开发一个聊天室
- 利用socket.io实现多人聊天室(基于Nodejs)
- 使用nodejs引用socket.io做聊天室
- 使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室
- NodeJs、SocketJs整合聊天室开发
- 基于Nodejs利用socket.io实现多人聊天室
- 利用socket.io+nodejs打造简单聊天室
- Nodejs入门学习,nodejs web开发入门,npm、express、socket配置安装、nodejs聊天室开发
- NodeJS和Socket.IO搭建聊天室应用
- 使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室
- Nodejs入门学习,nodejs web开发入门,npm、express、socket配置安装、nodejs聊天室开发
- 利用socket.io实现多人聊天室(基于Nodejs)
- 使用nodejs引用socket.io做聊天室