聊天室主要是某个客户端浏览器给服务发送一条消息,服务器接收到消息时,发送到各个客户端浏览器。
明显需要主要2个部分,服务器端逻辑处理文件和客户端消息逻辑及操作界面(即静态html页面),github给了很好的demo,不过我没有仿照它,而是看着文档简单的写了几行代码,主要实现服务器和客户端的通信,了解socket.io的主要方法。
服务器端的要创建http服务,并设置监听端口,供客户端连接。
var app=require('http').createServer(handler);
var io=require('socket.io')(app); var fs=require('fs'); app.listen(8080); function handler(req,res) { fs.readFile(__dirname+'/index.html',function(err,data) { if (err) { res.writeHead(500); return res.end('Error loading index.html'); } res.writeHead(200); res.end(data);})
}当客户端连接到服务器成功后,触发connection事件,在此事件处理消息的发送。
io.on('connection',function(socket) {
socket.on('msg',function(data) {//服务器接收浏览器发送的聊天内容 console.log(data); io.emit('msgView',{msg:data});//服务器接收到的聊天内容发送到各个客户端 }) });注意红色代码行,是io.emit,不是io.socket.emit,io.socket.emit为当前连接的client
客户端处理逻辑
连接到服务器,点击发送时,获取输入内容发送到服务器。服务器接收到消息后会通知各个客户端消息内容,各个客户端接收到消息后在div中显示。
引用io.socket的js文件
//连接到服务器
var socket = io('http://localhost:8080');
var btnSend = document.querySelector("#btnSend"); btnSend.onclick = sendFun;‘//发送聊天内容到服务器
function sendFun() { var msg = document.querySelector("#txtMsg").value; socket.emit('msg',msg); }
//监听服务发送的消息
socket.on('msgView', function(data) { var box = document.querySelector("#box"); var newItem=document.createElement("p"); newItem.innerHTML=data.msg; box.appendChild(newItem); });
就是这么简单。
io.socket的命名空间和join方法可创建多个聊天室。