日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

c++ websocket客户端_python测试开发django81.dwebsocket实现websocket

發(fā)布時(shí)間:2023/12/19 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++ websocket客户端_python测试开发django81.dwebsocket实现websocket 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

HTTP 協(xié)議有一個(gè)缺陷:通信只能由客戶(hù)端發(fā)起,做不到服務(wù)器主動(dòng)向客戶(hù)端推送信息。
WebSocket 協(xié)議它的最大特點(diǎn)就是,服務(wù)器可以主動(dòng)向客戶(hù)端推送信息,客戶(hù)端也可以主動(dòng)向服務(wù)器發(fā)送信息,是真正的雙向平等對(duì)話(huà),屬于服務(wù)器推送技術(shù)的一種。

websocket簡(jiǎn)介

隨著互聯(lián)網(wǎng)的發(fā)展,傳統(tǒng)的HTTP協(xié)議已經(jīng)很難滿(mǎn)足Web應(yīng)用日益復(fù)雜的需求了。近年來(lái),隨著HTML5的誕生,WebSocket協(xié)議被提出,它實(shí)現(xiàn)了瀏覽器與服務(wù)器的全雙工通信,擴(kuò)展了瀏覽器與服務(wù)端的通信功能,使服務(wù)端也能主動(dòng)向客戶(hù)端發(fā)送數(shù)據(jù)。
  我們知道,傳統(tǒng)的HTTP協(xié)議是無(wú)狀態(tài)的,每次請(qǐng)求(request)都要由客戶(hù)端(如 瀏覽器)主動(dòng)發(fā)起,服務(wù)端進(jìn)行處理后返回response結(jié)果,而服務(wù)端很難主動(dòng)向客戶(hù)端發(fā)送數(shù)據(jù);這種客戶(hù)端是主動(dòng)方,服務(wù)端是被動(dòng)方的傳統(tǒng)Web模式 對(duì)于信息變化不頻繁的Web應(yīng)用來(lái)說(shuō)造成的麻煩較小,而對(duì)于涉及實(shí)時(shí)信息的Web應(yīng)用卻帶來(lái)了很大的不便,如帶有即時(shí)通信、實(shí)時(shí)數(shù)據(jù)、訂閱推送等功能的應(yīng) 用。在WebSocket規(guī)范提出之前,開(kāi)發(fā)人員若要實(shí)現(xiàn)這些實(shí)時(shí)性較強(qiáng)的功能,經(jīng)常會(huì)使用折衷的解決方法:輪詢(xún)(polling)和Comet技術(shù)。其實(shí)后者本質(zhì)上也是一種輪詢(xún),只不過(guò)有所改進(jìn)。
  輪詢(xún)是最原始的實(shí)現(xiàn)實(shí)時(shí)Web應(yīng)用的解決方案。輪詢(xún)技術(shù)要求客戶(hù)端以設(shè)定的時(shí)間間隔周期性地向服務(wù)端發(fā)送請(qǐng)求,頻繁地查詢(xún)是否有新的數(shù)據(jù)改動(dòng)。明顯地,這種方法會(huì)導(dǎo)致過(guò)多不必要的請(qǐng)求,浪費(fèi)流量和服務(wù)器資源。
  Comet技術(shù)又可以分為長(zhǎng)輪詢(xún)和流技術(shù)。長(zhǎng)輪詢(xún)改進(jìn)了上述的輪詢(xún)技術(shù),減小了無(wú)用的請(qǐng)求。它會(huì)為某些數(shù)據(jù)設(shè)定過(guò)期時(shí)間,當(dāng)數(shù)據(jù)過(guò)期后才會(huì)向服務(wù)端發(fā)送請(qǐng)求;這種機(jī)制適合數(shù)據(jù)的改動(dòng)不是特別頻繁的情況。流技術(shù)通常是指客戶(hù)端使用一個(gè)隱藏的窗口與服務(wù)端建立一個(gè)HTTP長(zhǎng)連接,服務(wù)端會(huì)不斷更新連接狀態(tài)以保持HTTP長(zhǎng)連接存活;這樣的話(huà),服務(wù)端就可以通過(guò)這條長(zhǎng)連接主動(dòng)將數(shù)據(jù)發(fā)送給客戶(hù)端;流技術(shù)在大并發(fā)環(huán)境下,可能會(huì)考驗(yàn)到服務(wù)端的性能。
  這兩種技術(shù)都是基于請(qǐng)求-應(yīng)答模式,都不算是真正意義上的實(shí)時(shí)技術(shù);它們的每一次請(qǐng)求、應(yīng)答,都浪費(fèi)了一定流量在相同的頭部信息上,并且開(kāi)發(fā)復(fù)雜度也較大。
  伴隨著HTML5推出的WebSocket,真正實(shí)現(xiàn)了Web的實(shí)時(shí)通信,使B/S模式具備了C/S模式的實(shí)時(shí)通信能力。WebSocket的工作流程是這 樣的:瀏覽器通過(guò)JavaScript向服務(wù)端發(fā)出建立 WebSocket 連接的請(qǐng)求,在 WebSocket 連接建立成功后,客戶(hù)端和服務(wù)端就可以通過(guò) TCP連接傳輸數(shù)據(jù)。因?yàn)閃ebSocket連接本質(zhì)上是TCP連接,不需要每次傳輸都帶上重復(fù)的頭部數(shù)據(jù),所以它的數(shù)據(jù)傳輸量比輪詢(xún)和Comet技術(shù)小了很多.

環(huán)境安裝

相關(guān)環(huán)境:
Django 2.0.3
dwebsocket ?0.5.11

使用 django 開(kāi)發(fā) websocket 服務(wù)端,先安裝 dwebsocket

pip install dwebdocket==0.5.11

dwebsocket 使用

在視圖函數(shù)里面使用 accept_websocket裝飾器可以接收http 請(qǐng)求和 websocket 請(qǐng)求。
使用require_websocke裝飾器只允許使用WebSocket連接,會(huì)拒絕正常的HTTP請(qǐng)求。

相關(guān)方法說(shuō)明

1.request.is_websocket()

如果是個(gè)websocket請(qǐng)求返回True,如果是個(gè)普通的http請(qǐng)求返回False,可以用這個(gè)方法區(qū)分它們。

2.request.websocket

在一個(gè)websocket請(qǐng)求建立之后,這個(gè)請(qǐng)求將會(huì)有一個(gè)websocket屬性,用來(lái)給客戶(hù)端提供一個(gè)簡(jiǎn)單的api通訊,如果request.is_websocket()是False,這個(gè)屬性將是None。

3.WebSocket.wait()

返回一個(gè)客戶(hù)端發(fā)送的信息,在客戶(hù)端關(guān)閉連接之前他不會(huì)返回任何值,這種情況下,方法將返回None

4.WebSocket.read()

如果沒(méi)有從客戶(hù)端接收到新的消息,read方法會(huì)返回一個(gè)新的消息,如果沒(méi)有,就不返回。這是一個(gè)替代wait的非阻塞方法

5.WebSocket.count_messages()

返回消息隊(duì)列數(shù)量

6.WebSocket.has_messages()

如果有新消息返回True,否則返回False

7.WebSocket.send(message)

向客戶(hù)端發(fā)送消息

8.WebSocket.iter()

websocket迭代器

使用案例

views.py 視圖函數(shù)

from django.shortcuts import render
import json
import time
from dwebsocket.decorators import accept_websocket, require_websocket
import re

# Create your views here.

# 上海-悠悠 https://www.cnblogs.com/yoyoketang

@accept_websocket
def test_websocket(request):
'''服務(wù)端視圖'''

if request.is_websocket(): # 如果請(qǐng)求是websocket請(qǐng)求:WebSocket = request.websocket

while True:
# 判斷是否通過(guò)websocket接收到數(shù)據(jù)
if WebSocket.has_messages():

# 接收Websocket客戶(hù)端發(fā)送過(guò)來(lái)的消息
client_msg = WebSocket.read().decode("utf-8")

# 設(shè)置返回前端的數(shù)據(jù)
res = re.sub("嗎?([??])", "!", client_msg)
messages = {
'time': time.strftime('%Y.%m.%d %H:%M:%S', time.localtime(time.time())),
'server_msg': res,
'client_msg': client_msg
}
request.websocket.send(json.dumps(messages))

else:
pass

def test_websocket_client(request):
'''客戶(hù)端視圖'''
return render(request,'websocket_client.html')

在templates文件夾下新建 websocket_client.html 模板,編寫(xiě)瀏覽器 websocket 的客戶(hù)端





django-websocket






send message

Received Messages





urls.py 配置 websocket 客戶(hù)端訪(fǎng)問(wèn)的url

from django.contrib import admin
from django.urls import path
from hello import views

urlpatterns = [
path('admin/', admin.site.urls),
path('test_websocket', views.test_websocket, name='test_websocket'),
path('test_websocket_client', views.test_websocket_client , name='test_websocket_client'),
]

測(cè)試websocket

先啟動(dòng)服務(wù)

python manage.py runserver 0.0.0.0:8000

瀏覽器打開(kāi)http://localhost:8000/test_websocket_client

輸入框,輸入內(nèi)容,給服務(wù)端發(fā)數(shù)據(jù)過(guò)去,會(huì)收到回復(fù)

打開(kāi)console可以看到服務(wù)端返回過(guò)來(lái)的json數(shù)據(jù)
2020年第四期《python接口自動(dòng)化+測(cè)試開(kāi)發(fā)》課程,7月4號(hào)開(kāi)學(xué)(火熱報(bào)名中!)
本期上課時(shí)間:7月4號(hào)-9月26號(hào),每周六、周日晚上20:30-22:30
聯(lián)系QQ:283340479

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的c++ websocket客户端_python测试开发django81.dwebsocket实现websocket的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。