Por que usar WebSocket?
Por que ainda usamos o WebSocket depois de termos solicitações http?
O HTTP só pode ser iniciado em uma direção, só pode ser iniciado pelo cliente e o servidor responde passivamente. O servidor não pode enviar mensagens ativamente para o cliente. Se você deseja implementar uma função de mensagens instantâneas semelhante a uma sala de bate-papo, você precisa usar a votação de mensagens. A votação é ineficiente e consome mais recursos. (Toda vez que uma conexão http é estabelecida, um handshake de três vias é executado e cada solicitação precisa conter um cabeçalho de solicitação.) Para resolver esse problema, os desenvolvedores inventaram o webSocket
1. O que é WebSocket?
WebSocket é um protocolo proposto pela especificação HTML5.
Sua maior característica é que o servidor pode enviar informações ativamente para o cliente, e o cliente também pode enviar informações ativamente para o servidor.É um diálogo real de duas vias e pertence a um tipo de tecnologia de envio de servidor.
2. Uso de WebSocket
1. Criação de links
wx.connectSocket({
url: 'wss://example.qq.com',
header:{
'content-type': 'application/json'
},
protocols: ['protocol1']
})
Crie uma conexão WebSocket.
2. Ligar retorno de chamada
wx.onSocketOpen(res=>{
conlose.log(res)
})
Responsável por ouvir os eventos abertos da conexão WebSocket.
3. Envie informações
let socketOpen = false
let socketMsgQueue = []
wx.connectSocket({
url: 'test.php'
})
wx.onSocketOpen(function(res) {
socketOpen = true
for (let i = 0; i < socketMsgQueue.length; i++){
sendSocketMessage(socketMsgQueue[i])
}
socketMsgQueue = []
})
function sendSocketMessage(msg) {
if (socketOpen) {
wx.sendSocketMessage({
data:msg
})
} else {
socketMsgQueue.push(msg)
}
}
Envie dados por uma conexão WebSocket. É necessário wx.connectSocket primeiro e enviar após o retorno de chamada wx.onSocketOpen.
4. Fechar link
wx.connectSocket({
url: 'test.php'
})
//注意这里有时序问题,
//如果 wx.connectSocket 还没回调 wx.onSocketOpen,而先调用 wx.closeSocket,那么就做不到关闭 WebSocket 的目的。
//必须在 WebSocket 打开期间调用 wx.closeSocket 才能关闭。
wx.onSocketOpen(function() {
wx.closeSocket()
})
wx.onSocketClose(function(res) {
console.log('WebSocket 已关闭!')
})
5. Desligue o monitoramento de links
wx.onSocketClose(res=>{
conlose.log(res)
})
//参数
//code number 一个数字值表示关闭连接的状态号,表示连接被关闭的原因。
//reason string 一个可读的字符串,表示连接被关闭的原因。