node.js结合socket.io实现服务端与客户端相互通信

官网:https://socket.io/

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

发布了200 篇原创文章 · 获赞 37 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/qq_42231156/article/details/103795392
今日推荐