命名空間
? 每個(gè)命名空間類似于一個(gè)獨(dú)立的管道药有。
服務(wù)器
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)=>{
//監(jiān)聽(tīng)a的連接事件
socket.on('disconnect',()=>{
//監(jiān)聽(tīng)用戶斷開(kāi)事件
console.log("用戶"+socket.id+"斷開(kāi)連接");
});
console.log("用戶"+socket.id+"連接");
socket.on('msg',(data)=>{
//監(jiān)聽(tīng)msg事件(這個(gè)是自定義的事件)
console.log(data);//你好服務(wù)器,我是通過(guò)a的命名空間發(fā)送的信息
socket.emit('msg','你好瀏覽器,我收到了你的信息');
//向socket用戶發(fā)送信息
})
})
let b = soc.of('/b');
//添加命名空間b
b.on('connection',(socket)=>{
//監(jiān)聽(tīng)b的連接事件
socket.on('disconnect',()=>{
//監(jiān)聽(tīng)用戶斷開(kāi)事件
console.log("用戶"+socket.id+"斷開(kāi)連接");
});
console.log("用戶"+socket.id+"連接");
socket.on('msg',(data)=>{
//監(jiān)聽(tīng)msg事件(這個(gè)是自定義的事件)
console.log(data);//你好服務(wù)器,我是通過(guò)b的命名空間發(fā)送的信息
socket.emit('msg','你好瀏覽器搓扯,我收到了你的信息1');
//向socket用戶發(fā)送信息
})
})
瀏覽器
<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','你好服務(wù)器,我是通過(guò)b的命名空間發(fā)送的信息');
//自定義msg事件检痰,發(fā)送‘你好服務(wù)器’字符串向服務(wù)器
a.on('msg',(data)=>{
//監(jiān)聽(tīng)瀏覽器通過(guò)msg事件發(fā)送的信息
console.log(data);//你好瀏覽器,我收到了你的信息1
});
b.emit('msg','你好服務(wù)器,我是通過(guò)b的命名空間發(fā)送的信息');
//自定義msg事件锨推,發(fā)送‘你好服務(wù)器’字符串向服務(wù)器
b.on('msg',(data)=>{
//監(jiān)聽(tīng)瀏覽器通過(guò)msg事件發(fā)送的信息
console.log(data);//你好瀏覽器,我收到了你的信息2
});
</script>
廣播信息
? 如果你想給除了你之外的所有用戶廣播信息只需要在.emit前面加上broadcast即可:
soc.on('connection', function (socket) {
socket.broadcast.emit('有用戶連接');
//這條信息會(huì)發(fā)送給除了當(dāng)前socket的其他用戶
});