命名空间
每个命名空间类似于一个独立的管道。
服务器
const express = require('express');
const http = require('http');
const socketIo = require('socket.io');
const app = express();
const ser = http.Server(app);
const soc = socketIo(ser);
ser.listen(80);
let a = soc.of('/a');
//添加命名空间a
a.on('connection',(socket)=>{
//监听a的连接事件
socket.on('disconnect',()=>{
//监听用户断开事件
console.log("用户"+socket.id+"断开连接");
});
console.log("用户"+socket.id+"连接");
socket.on('msg',(data)=>{
//监听msg事件(这个是自定义的事件)
console.log(data);//你好服务器,我是通过a的命名空间发送的信息
socket.emit('msg','你好浏览器,我收到了你的信息');
//向socket用户发送信息
})
})
let b = soc.of('/b');
//添加命名空间b
b.on('connection',(socket)=>{
//监听b的连接事件
socket.on('disconnect',()=>{
//监听用户断开事件
console.log("用户"+socket.id+"断开连接");
});
console.log("用户"+socket.id+"连接");
socket.on('msg',(data)=>{
//监听msg事件(这个是自定义的事件)
console.log(data);//你好服务器,我是通过b的命名空间发送的信息
socket.emit('msg','你好浏览器,我收到了你的信息1');
//向socket用户发送信息
})
})
浏览器
<script src='socket.io.js'></script>
<!--socket.io.js自己去找-->
<script>
let a = io.connect('http://localhost:80/a');
//与a命名空间建立连接
let b = io.connect('http://localhost:80/b');
//同理
a.emit('msg','你好服务器,我是通过b的命名空间发送的信息');
//自定义msg事件,发送‘你好服务器’字符串向服务器
a.on('msg',(data)=>{
//监听浏览器通过msg事件发送的信息
console.log(data);//你好浏览器,我收到了你的信息1
});
b.emit('msg','你好服务器,我是通过b的命名空间发送的信息');
//自定义msg事件,发送‘你好服务器’字符串向服务器
b.on('msg',(data)=>{
//监听浏览器通过msg事件发送的信息
console.log(data);//你好浏览器,我收到了你的信息2
});
</script>
广播信息
如果你想给除了你之外的所有用户广播信息只需要在.emit前面加上broadcast即可:
soc.on('connection', function (socket) {
socket.broadcast.emit('有用户连接');
//这条信息会发送给除了当前socket的其他用户
});
网友评论