socket.io
Socket.IO 是一个基于 Node.js 的实时应用程序框架,在即时通讯、通知与消息推送,实时分析等场景中有较为广泛的应用。
前言
当一台单机的socket服务无法支撑其业务时 我们需要集群部署实现请结合egg-socket.io 来阅读
链接
一、介绍配置
先看下配置文件 config文件夹下
// {app_root}/config/config.${env}.js
exports.io = {
init: { }, // passed to engine.io
namespace: {
// 分别为 连接不同命名空间时 配置不同的中间件
'/': {
connectionMiddleware: [],
packetMiddleware: [],
},
'/example': {
connectionMiddleware: [],
packetMiddleware: [],
},
},
//配置socket-adapter 的适配类型
redis: {
host: '',
port: 6379
}
};
当socket连接过多,需要集群部署时 请选择redis作为其适配器
egg-socket.io 内部集成了 socket.io-redis,当配置文件使用redis时 会将redis 默认作为其适配源
利用了redis 管道的订阅 发布的功能 实现了消息同步
单机
二、使用步骤
1.准备
node 环境 以及redis服务
代码如下(示例):
写了个简单的html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>socket.io演示客户端</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.1.1/socket.io.js"></script>
</head>
<body>
<h1>socket.io演示客户端</h1>
<input type="text" placeholder="发送消息" id="roomId"><button>发送</button>
<div>
<button id="loginout">退出</button>
</div>
<div id="word">
</div>
</body>
<script>
$=function (id) {
return document.getElementById(id);
};
const room = 'wasteHome' //Math.random().toFixed(3)*1000
const userId = Math.random().toFixed(3)*1000
var socket = io.connect(`127.0.0.1:7001/wasteHome?userId=${userId}&room=`+room);
var setRoom = document.getElementsByTagName("button")[0],
msg = $("msg"),
word = $("word"),
toRoom=$("toRoomId"),
loginOut=$("loginout");
setRoom.onclick=function(){
socket.emit('sayHi',{
userId,
room:'wasteHome',
payload: {
msg : '我是kd来自'+room+'房,编号是===='+userId,
},
});
};
loginOut.onclick = ()=> {
alert('我退出了')
socket.disconnect();
}
// 当收到对方发来的数据后触发 message 事件
socket.on('message',function (data) {
console.log('收到了==========',data)
word.innerHTML+="<p>"+data+"</p>";
});
socket.on('online',function (data) {
alert(data.message)
console.log('我上线了==========',data)
});
socket.on('leave',function (data) {
alert(data.message)
console.log(33333)
});
</script>
</html>
2.测试
略。。。