WebsocketWebSSH
什么是WebSSH?
- webssh 泛指一種技術可以在網(wǎng)頁上實現(xiàn)一個 SSH 終端
- ssh終端:用來通過ssh協(xié)議,連接服務器進行管理
- 運維開發(fā)方向:堡壘機登錄、線上機器管理(因為運維人員不可能24小時攜帶電腦)
- 在線編程:提供一個編程環(huán)境
WebSSH是一個簡單的Web SSH客戶端,用作連接到SSH服務器的SSH客戶端。它是用Python編寫的,基于tornado,paramiko和xterm.js,特征如下:
- 支持SSH密碼驗證,包括空密碼。
- 支持SSH公鑰認證,包括DSA RSA ECDSA Ed25519密鑰。
- 支持加密密鑰。
- 支持雙因素身份驗證(基于時間的一次性密碼)。
- 支持全屏終端。
- 終端窗口可調(diào)整大小。
- 自動檢測ssh服務器的默認編碼。
- 現(xiàn)代瀏覽器支持Chrome,Firefox,Safari,Edge,Opera。
WebSSH是如何工作的?
123 ±--------+ http ±-------+ ssh ±----------+|
browser | <====> | webssh | <=> | ssh server|±--------+
websocket ±-------+ ssh ±----------+
WebSSH安裝
Python 2.7 / 3.4 +
websocket
什么是websocket
- webSocket是一種在單個TCP連接上進行全雙工通信的協(xié)議
- 客戶端和服務器之間的數(shù)據(jù)交換變得更加簡單,允許服務端主動向客戶端推送數(shù)據(jù)。
- 瀏覽器和服務器只需要完成一次握手,兩者之間就直接可以創(chuàng)建持久性的連接,并進行雙向數(shù)據(jù)傳輸
遠古時期解決方案就是輪訓
客戶端以設定的時間間隔周期性地向服務端發(fā)送請求,頻繁地查詢是否有新的數(shù)據(jù)改動(浪費流量和資源)
webSocket應用場景?
聊天軟件:
最著名的就是微信,QQ,這一類社交聊天的app
彈幕:
各種直播的彈幕窗口
在線教育:
可以視頻聊天、即時聊天以及其與別人合作一起在網(wǎng)上討論問題…
websocket與http區(qū)別
- http請求建立連接只能發(fā)送一次請求
- websocket建立的長連接,一次連接,后續(xù)一直通信,這樣節(jié)省資源
websocket原理
- websocket首先借助http協(xié)議(通過在http頭部設置屬性,請求和服務器進行協(xié)議升級,升級協(xié)議為websocket的應用層協(xié)議)
- 建立好和服務器之間的數(shù)據(jù)流,數(shù)據(jù)流之間底層還是依靠TCP協(xié)議;
- websocket會接著使用這條建立好的數(shù)據(jù)流和服務器之間保持通信
- 由于復雜的網(wǎng)絡環(huán)境,數(shù)據(jù)流可能會斷開,在實際使用過程中,我們在onFailure或者onClosing回調(diào)方法中,實現(xiàn)重連
webSocket使用說明
1. 如果你想為一個單獨的視圖處理一個websocklet連接可以使用accept_websocket裝飾器,它會將標準的HTTP請求路由到視圖中。
2. 使用require_websocke裝飾器只允許使用WebSocket連接,會拒絕正常的HTTP請求。
3. 在設置中添加設置MIDDLEWARE_CLASSES=dwebsocket.middleware.WebSocketMiddleware這樣會拒絕單獨的視圖實用websocket,必須加上accept_websocket 裝飾器。
4. 設置WEBSOCKET_ACCEPT_ALL=True可以允許每一個單獨的視圖實用websockets
3.圖解http與webSocket比較
- 瀏覽器通過 JavaScript 向服務端發(fā)出建立 WebSocket 連接的請求
- 在 WebSocket 連接建立成功后,客戶端和服務端就可以通過 TCP連接傳輸數(shù)據(jù)。
- 因為WebSocket 連接本質(zhì)上是 TCP 連接,不需要每次傳輸都帶上重復的頭部數(shù)據(jù)
Django的Websocket
1)dwebsocket介紹
1. dwebsocket 是一個在 django 用來實現(xiàn) websocket 服務端的三方模塊,使用上手非常簡單
2. 安裝方式如下:pip install dwebsocket
3. git 地址:https://github.com/duanhongyi/dwebsocket
2)dwebsocket方法
首先是兩個基本的裝飾器,用來限定過濾 websocket 的連接
dwebsocket.accept_websocket # 允許 http 與 websocket 連接
dwebsocket.require_websocke # 只允許 websocket 連接
HTML的Websocket
1)響應事件
復制代碼 # 1. 創(chuàng)建一個WebSocket連接 var ws = new WebSocket("ws://127.0.0.1:8001/echo")# 2. ws.onopen方法(當 ws 連接建立時觸發(fā)) ws.onopen = function () {console.log('WebSocket open'); //成功連接上Websocket };# 3. 當 ws 連接接收到數(shù)據(jù)時觸發(fā) ws.onmessage = function (e) {console.log('message: ' + e.data); //打印出服務端返回過來的數(shù)據(jù) };# 4. 當 ws 連接發(fā)生通信錯誤時觸發(fā) ws.onerror = function () {console.log('連接出錯'); };# 5. 當連接關閉時觸發(fā) ws.onclose = function(){console.log('連接關閉') }2)方法
ws.send(str) // 通過ws連接發(fā)送數(shù)據(jù)
ws.close() // 關閉ws連接
Websocket心跳包機制
心跳包的意義
1. 在使用websocket的過程中,有時候會遇到網(wǎng)絡斷開的情況,但是在網(wǎng)絡斷開的時候服務器端并沒有觸發(fā)onclose的事件。
2. 這樣會有:服務器會繼續(xù)向客戶端發(fā)送多余的鏈接,并且這些數(shù)據(jù)還會丟失。
3. 所以就需要一種機制來檢測客戶端和服務端是否處于正常的鏈接狀態(tài)。
4. 因此就有了websocket的心跳了,還有心跳,說明還活著,沒有心跳說明已經(jīng)掛掉了
websocket實現(xiàn)心跳檢測的思路
- 通過setInterval定時任務每個3秒鐘調(diào)用一次reconnect函數(shù)
- reconnect會通過socket.readyState來判斷這個websocket連接是否正常
- 如果不正常就會觸發(fā)定時連接,每4s鐘重試一次,直到連接成功
- 如果是網(wǎng)絡斷開的情況下,在指定的時間內(nèi)服務器端并沒有返回心跳響應消息,因此服務器端斷開了。
- 服務斷開我們使用ws.close關閉連接,在一段時間后,可以通過 onclose事件監(jiān)聽到。
原址參考于此
總結
以上是生活随笔為你收集整理的WebsocketWebSSH的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 布隆过滤器Redis缓存穿透雪崩击穿热点
- 下一篇: Mysql数据库五大常用数据引擎