Приветствую.
Весьма странная ситуация. Первый раз использую веб сокеты.
При загрузке страницы клиент отправляет запрос на сервер.
Странность в том, что при первой загрузке страницы евент connection на бэкенде срабатывает 2 раза.
Вторая перезагрузка - 3 раза
Третья - 4 раза
Видео:
https://www.recordjoy.com/view/V40Nzn77pFoShjC8O4H7
В чём причина???
Клиент:
const ws = new WebSocket('ws://localhost:8080')
const id = window.location.pathname.split('/')[2]
ws.onopen = () => {
const message = {
event: "transition",
id
}
ws.send(JSON.stringify(message))
}
ws.onmessage = (message) => {
console.log(message.data)
}
ws.onerror = (err) => {
console.log(err)
}
window.onbeforeunload = () => {
ws.close()
}
Сервер (это middleware в express):
import { WebSocketServer } from 'ws'
import linkService from '../services/link.js'
import transitionService from '../services/transition.js'
const wss = new WebSocketServer({ port: 8080 })
export default function(req, res, next){
wss.on('connection', ws => {
console.log('connection')
if(req.autorized){
ws.clientID = req.user._id
}
ws.on('message', async (message)=>{
const data = JSON.parse(message.toString())
switch (data.event) {
case "transition":
const linkData = await linkService.saveFollowData(req.socket.remoteAddress, req.get('user-agent'), data.id)
wss.clients.forEach(c => {
if(c.clientID == linkData.user){
transitionService.getData(linkData.user).then((data)=>{
c.send(JSON.stringify(data))
})
}
})
ws.send(linkData.from)
break;
default:
break;
}
})
})
next()
}