1. 创建一个node项目。
2. 在node项目中安装socket.io:npm install --save socket.io。
3. 在node项目中引入socket.io:
4. socket.io与服务端建立连接:http://localhost:3000/socket.io/socket.io.js。
var http=require('http');
var fs=require('fs');
var app=http.createServer(function(req,res){
fs.readFile('index.html',(err,data)=>{ //加载静态页面index.html
res.writeHead(200,{'Content-Type':'text/index;chartset="utf-8"'});
res.end(data)
})
})
var io=require('socket.io')(app);//引入socket.io
io.on('connection',(socket)=>{
console.log('与服务器建立连接了')
socket.on('send',(data)=>{ //服务端监听服务端send事件传递过来的数据
console.log(data);
socket.emit('to-client','我是服务端发送给客户端的数据'); //发送给客户端信息(谁发给服务端,服务端就返回给谁信息)
io.emit('to-clients','我是服务端发送给所有客户端的数据'); //群发送给客户端信息
})
}) //生成http://localhost:3000/socket.io/socket.io.js。
app.listen(3000)
5. 在客户端index.html引入socket.io.js并与服务端建立连接:http://localhost:3000/socket.io/socket.io.js。
<script src='http://localhost:3000/socket.io/socket.io.js'></script>
<script>
var socket=io.connect('http://localhost:3000/'); //与服务端建立连接
btn.οnclick=()=>{
socket.emit('send',{data:"我是客户端给服务端发送的消息数据"}); //2个参数分别是客户端向服务端发送的事件以及对于的数据,第一个参数是事件名,第二个参数是要发送的数据(字符串或者对象);
socket.on('to-client',(data)=>{ //监听服务端给客户端发送的信息
})
socket.on('to-clients',(data)=>{}) //监听服务端给所有客户端发送的信息
}
</script>
6. 给指定的房间发送消息:
//服务端:与客户端建立连接时,传递房间号,如roomId=2
<script src='http://localhost:3000/socket.io/socket.io.js'></script>
<script>
var socket=io.connect('http://localhost:3000?roomId=2'); //客户端房间2号与服务端建立连接
btn.οnclick=()=>{
socket.emit('send',{data:"我是客户端给服务端发送的消息数据"});
socket.on('to-room-client',(data)=>{}) //监听服务端给指定房间号的客户端发送的信息
}
</script>
//服务端:取客户端建立连接时的房间号,加入socket
var io=require('socket.io')(app);
var url=require('url');
io.on('connection',(socket)=>{
console.log(socket.request.url); //这个与服务端建立连接的地址,如xx/index.html?roomId=2
console.log('与服务器建立连接了');
var roomId=url.parse(socket.request.url,true).query.roomId; //获取房间号,
//url.parse(url,true)可以将xx/index.html?roomId=2转化为{query:{roomId=2}}格式
socket.join(roomId);//加入房间号
socket.on('send',(data)=>{
io.to(roomId).emit('to-room-client',"给指定的房间号所有人广播数据");
socket.broadcast.to(roomId).emit('to-room-client',"给指定的房间号除了自己外的所有人广播数据");
})
})
app.listen(3000)
7. koa:参考https://github.com/mattstyles/koa-socket。