如果要给指定的人发送信息,在websocket里面就要用到socketIdxos来作为一个识别每个连接用户的"id"
socketIdxos可以是字符串,也可以是数字,一般是在一个用户连接上触发connection事件上用到的,我这里选用8位数字来作为这个id的内容,为了防止重复出现,便搞了一下这个代码
function gid() {
var id = Math.floor(Math.random() * (99999999 - 10000000 + 1)) + 10000000
var have = false;
for (var i = 0; i < player.length; i++) {
if (player[i] == id.toString()) {
have = true;
break;
}
}
if (have) {
gid();
} else {
return id;
}
}
这个代码里面有个player,是记录每个玩家id的数组,当发生重复时就回调这个函数(八位数一般重复概率很小,但也并不是没有),获取之后在代码上就添加
var id = gid()
player.push(id)
添加进去后即可
随后如果说要去匹配的话,先获取所有连接上的人的对象
wss.on("connection", (ws, req) => {
wss.clients.forEach(s => {
})
})
其中 s 就是这个对象,那么我们前面说到的socketIdxos就可以用到了,因为在每个获取的对象中它都能返回一个socketIdoxs(也就是s.socketIdoxs),你只需要那这个匹配就行,这样只需匹配到s.socketIdoxs相同的人即可,最后再s.send(你要发的信息)
完整代码(记得要把gid()这个方法给加进去!):
const SocketServer = require('ws').Server
const wss = new SocketServer({ server }) //搭建服务器
var player = new Array()
//当有人匹配到时
wss.on("connection", (ws, req) => {
// 把自己的给搞好先
id = gid();
player.push(id)
wss.clients.forEach(s => {
if (s.socketIdxos == another && s.readyState == 1 && s.socketIdxos != id) {
//another是你要找对面的id号
//做你自己的事,此时s就是你要找的对象,发送信息用s.send()即可
})
})
})
若有什么疑问可以在下方评论区询问