一文教你如何優(yōu)雅的使用WebSocket
簡介
websocket是基于TCP的一種雙向通信協(xié)議。在此之前,一直是采用輪詢的方式進行雙向通信,這種方式效率低下還非常浪費資源。為了解決這種問題,websocket應運而生。
特性
- 雙向通信:websocket使得客戶端跟服務端之間交換數(shù)據(jù)變得更加簡單。允許服務器主動向客戶端推送數(shù)據(jù)。瀏覽器只需要和服務器完成一次握手,就可以創(chuàng)建持久性的連接,并進行雙向數(shù)據(jù)傳輸。
- 實時性強: 服務器可以主動給客戶端推送數(shù)據(jù),相比http請求需要先由客戶端發(fā)起請求,瀏覽器才會響應,延遲明顯更少、時間更短。
- 連接保持:websocket連接創(chuàng)建成功后,只要連接不斷開,通信會一直保持,而且還會省略部分狀態(tài)信息(http請求可能每次請求都需要攜帶狀態(tài)信息)
使用場景
- 相對于http,websocket優(yōu)勢顯而易見。所以在一些實時通信上,都需要用到websocket,比如多媒體聊天、玩家游戲、頁面局部刷新、協(xié)同編輯等場景。
具體實現(xiàn)
- 介紹完了什么是websocket,下面介紹下如何實現(xiàn)websocket。
一、首先是服務端代碼,這里我用的是nodejs。
1、我們先新建一個websocket.js文件
// 創(chuàng)建websocket服務
const port = "8888"
const ws = require('nodejs-websocket');
const web_server = ws.createServer(function (conn) {
conn.on('text', function (text) {
console.log("發(fā)送的消息",text);
conn.sendText(`發(fā)送成功了,發(fā)送的消息為:${text}`)
});
conn.on('close', function (code, reason) {
console.log('關閉連接');
});
conn.on('error', function (code, reason) {
console.log('異常關閉');
});
}).listen(port);
exports.web_server = web_server2、在app.js里面進行引入
const websocket = require("./websocket")3、最后啟動服務
node app
二、然后是客戶端代碼
① 在vue中使用
1、我們先在utils下新建一個websocket.js文件
let webSocket = null;
let socketOpen = false;
// 發(fā)送消息
export const doSend = (message) => {
if (socketOpen) {
webSocket.send(message)
}
}
// 初始化websocket
export const contactSocket = () => {
if ("WebSocket" in window) {
webSocket = new WebSocket("ws://192.168.1.100:8888/");
webSocket.onopen = function () {
console.log("連接成功!");
socketOpen = true
};
webSocket.onmessage = function (evt) {
var received_msg = evt.data;
console.log("接受消息:" + received_msg);
};
webSocket.onclose = function () {
console.log("連接關閉!");
};
}
}2、頁面引入文件
import { contactSocket, doSend } from '@/utils/contactSocket'3、具體使用實例
// 初始化websocket
contactSocket()
// 發(fā)送消息內容
setTimeout(() => {
doSend("向服務端發(fā)送的消息")
}, 1000)② 在uniapp中使用
1、我們先在utils文件夾下新建一個websocket.js文件
let socketOpen = false;
// 發(fā)送消息
function doSend(message) {
if (socketOpen) {
uni.sendSocketMessage({
data: message
});
}
}
// 初始化websocket
function contactSocket() {
// 建立連接
uni.connectSocket({
url: 'ws://192.168.1.100:8888/'
});
// 連接錯誤
uni.onSocketError(function(res) {
console.log('WebSocket連接打開失敗,請檢查!');
});
// 打開了連接
uni.onSocketOpen(function() {
console.log('WebSocket連接已打開!');
socketOpen = true;
});
// 關閉連接
uni.onSocketClose(function(res) {
console.log('WebSocket 已關閉!');
});
// 接受消息
uni.onSocketMessage(function(res) {
console.log('收到服務器內容:' + res.data);
});
}
module.exports = {
doSend,
websocketInit
}2、頁面引入文件
import { doSend, contactSocket } from '@/utils/websocket.js'3、具體使用實例
// 初始化websocket
contactSocket()
// 發(fā)送消息內容
setTimeout(()=>{
doSend("向服務端發(fā)送的消息");
},1000)總結
到此這篇關于如何優(yōu)雅的使用WebSocket的文章就介紹到這了,更多相關優(yōu)雅使用WebSocket內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
微信小程序使用webview打開pdf文檔以及顯示網頁內容的方法步驟
在線查看PDF文件,已經是很常見的需求了,下面這篇文章主要給大家介紹了關于微信小程序使用webview打開pdf文檔以及顯示網頁內容的方法步驟,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2022-07-07
編寫高性能的JavaScript 腳本的加載與執(zhí)行
把腳本放在body中,當瀏覽器遇見<script>標簽時, 瀏覽器不知道腳本會插入文本還是html標簽,因此瀏覽器會停止分析html頁面而去執(zhí)行腳本。2010-04-04
js 方法實現(xiàn)返回多個數(shù)據(jù)的代碼
2009-04-04

