使用socket.io做一个简单的WEB聊天室(可消息私发)
1.创建工程目录
目录命名为:chat-web
2.创建package.json
使用命令:npm init,会引导你设置package.json的内容.
3.安装依赖包
使用命令:1 2
| npm install --save express npm install --save socket.io
|
安装完成后你会在工程目录看见有自动生成的node_modules文件夹
4.编写index.js代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http);
app.get('/', function(req, res){ console.log("dir:" + __dirname); res.sendFile( __dirname + '/index.html'); });
var sm = {}; io.on('connection', function(socket){ socket.on('chat-reg',function(data){ console.log("chat-reg:" + JSON.stringify(data)); sm[data.user] = socket; socket.emit('chat-reg',{code:200,msg:"reg success"}); }); socket.on('chat-data',function(data){
console.log("chat-data:" + JSON.stringify(data)); if(data.msg[0] == '@'){ socket.emit('chat-data',data); var i = data.msg.indexOf(' '); var u = data.msg.substring(1,i); var m = data.msg.substring(i,data.msg.length); if(typeof sm[u] != 'undefined'){ sm[u].emit('chat-data',{user:data.user,msg:"[private]" + m}); } }else{ io.sockets.emit('chat-data',data); } }); });
http.listen(3000, function(){ console.log('listening on:3000'); });
|
5.编写index.html代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| <!doctype html> <html> <head> <title>私人聊天室</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { font: 13px Helvetica, Arial; } form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; } form input { border: 0; padding: 10px; width: 90%; margin-right: .5%; } form button { width: 9%; background: rgb(130, 224, 255); border: none; padding: 10px; } #messages { list-style-type: none; margin: 0; padding: 0; } #messages li { padding: 5px 10px; } #messages li:nth-child(odd) { background: #eee; }
#info{ height: 50px; text-align: center; line-height: 50px; background-color: #333; color: white; } </style> </head> <body> <div id="info"></div> <ul id="messages"></ul> <form action=""> <input id="m" autocomplete="off" /><button>Send</button> </form> <script src="http://cdn.bootcss.com/socket.io/1.7.1/socket.io.min.js"></script> <script src="http://cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script> <script> var user = "user" + Math.floor(Math.random()*1000); var socket = io(); socket.emit('chat-reg',{user:user}); $("#info").text("您的用户名:"+user); $('form').submit(function(){ socket.emit('chat-data', {user:user,msg:$('#m').val()}); $('#m').val(''); return false; }); socket.on('chat-data', function(data){ $('#messages').append($('<li>').text("[" + data.user + "]:" + data.msg)); }); socket.on('chat-reg',function(data){ console.log(JSON.stringify(data)); }); </script> </body> </html>
|
6.项目测试
在控制台工程目录下运行node index.js.
在浏览器中访问:localhost:3000.
你可以多打开几个浏览器窗口,模拟多个用户。
赶紧动手试试效果吧。