日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Django 實現 Websocket 廣播、點對點發送消息的代碼

瀏覽:257日期:2024-09-29 16:26:21

1.Django實現Websocket

使用Django來實現Websocket服務的方法很多在這里我們推薦技術最新的Channels庫來實現

1.1.安裝DjangoChannels

Channels安裝如果你是Windows操作系統的話,那么必要條件就是Python3.7

pip install channels

1.2.配置DjangoChannels

1.創建項目ChannelsReady

django-admin startprobject ChannelsReady

2.在項目的settings.py同級目錄中,新建文件routing.py

# routing.pyfrom channels.routing import ProtocolTypeRouterapplication = ProtocolTypeRouter({ # 暫時為空})

3.在項目配置文件settings.py中寫入

INSTALLED_APPS = [ ’channels’]ASGI_APPLICATION = 'ChannelsReady.routing.application'

1.3.啟動帶有Channels提供的ASGI的Django項目

You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.Run ’python manage.py migrate’ to apply them.February 01, 2020 - 17:27:13Django version 3.0.2, using settings ’ChannelsReady.settings’Starting ASGI/Channels version 2.4.0 development server at http://0.0.0.0:8000/Quit the server with CTRL-BREAK.

很明顯可以看到ASGI/Channels,這樣就算啟動完成了

1.4.創建Websocket服務

1.創建一個新的應用chats

python manage.py startapp chats

2.在settings.py中注冊chats

INSTALLED_APPS = [ ’chats’, ’channels’]

3.在chats應用中新建文件chatService.py

from channels.generic.websocket import WebsocketConsumer# 這里除了 WebsocketConsumer 之外還有# JsonWebsocketConsumer# AsyncWebsocketConsumer# AsyncJsonWebsocketConsumer# WebsocketConsumer 與 JsonWebsocketConsumer 就是多了一個可以自動處理JSON的方法# AsyncWebsocketConsumer 與 AsyncJsonWebsocketConsumer 也是多了一個JSON的方法# AsyncWebsocketConsumer 與 WebsocketConsumer 才是重點# 看名稱似乎理解并不難 Async 無非就是異步帶有 async / await# 是的理解并沒有錯,但對與我們來說他們唯一不一樣的地方,可能就是名字的長短了,用法是一模一樣的# 最夸張的是,基類是同一個,而且這個基類的方法也是Async異步的class ChatService(WebsocketConsumer): # 當Websocket創建連接時 def connect(self): pass # 當Websocket接收到消息時 def receive(self, text_data=None, bytes_data=None): pass # 當Websocket發生斷開連接時 def disconnect(self, code): pass

1.5.為Websocket處理對象增加路由

1.在chats應用中,新建urls.py

from django.urls import pathfrom chats.chatService import ChatServicewebsocket_url = [ path('ws/',ChatService)]

2.回到項目routing.py文件中增加ASGI非HTTP請求處理

from channels.routing import ProtocolTypeRouter,URLRouterfrom chats.urls import websocket_urlapplication = ProtocolTypeRouter({ 'websocket':URLRouter( websocket_url )})

總結:

下載 注冊到setting.py里的app 在setting.py同級的目錄下注冊channels使用的路由----->routing.py 將routing.py注冊到setting.py 把urls.py的路由注冊到routing.py里 編寫wsserver.py來處理websocket請求

<template> <div> <input type='text' v-model='message'> <p><input type='button' @click='send' value='發送'></p> <p><input type='button' @click='close_socket' value='關閉'></p> </div></template><script>export default { name:’websocket1’, data() { return { message:’’, testsocket:’’ } }, methods:{ send(){ // send 發送信息 // close 關閉連接 this.testsocket.send(this.message) this.testsocket.onmessage = (res) => { console.log('WS的返回結果',res.data); } }, close_socket(){ this.testsocket.close() } }, mounted(){ this.testsocket = new WebSocket('ws://127.0.0.1:8000/ws/') // onopen 定義打開時的函數 // onclose 定義關閉時的函數 // onmessage 定義接收數據時候的函數 // this.testsocket.onopen = function(){ // console.log('開始連接socket') // }, // this.testsocket.onclose = function(){ // console.log('socket連接已經關閉') // } }}</script>

3.廣播消息

3.1客戶端保持不變,同時打開多個客戶端

3.2服務端存儲每個鏈接的對象

socket_list = []class ChatService(WebsocketConsumer): # 當Websocket創建連接時 def connect(self): self.accept() socket_list.append(self) # 當Websocket接收到消息時 def receive(self, text_data=None, bytes_data=None): print(text_data) # 打印收到的數據 for ws in socket_list: # 遍歷所有的WebsocketConsumer對象 ws.send(text_data) # 對每一個WebsocketConsumer對象發送數據

4.點對點消息

4.1客戶端將用戶名拼接到url,并在發送的消息里指明要發送的對象

<template> <div> <input type='text' v-model='message'> <input type='text' v-model='user'> <p><input type='button' @click='send' value='發送'></p> <p><input type='button' @click='close_socket' value='關閉'></p> </div></template><script>export default { name:’websocket1’, data() { return { message:’’, testsocket:’’, user:’’ } }, methods:{ send(){ // send 發送信息 // close 關閉連接 var data1 = {'message':this.message,'to_user':this.user} this.testsocket.send(JSON.stringify(data1)) this.testsocket.onmessage = (res) => { console.log('WS的返回結果',res.data); } }, close_socket(){ this.testsocket.close() }, generate_uuid: function() { var d = new Date().getTime(); if (window.performance && typeof window.performance.now === 'function') { d += performance.now(); //use high-precision timer if available } var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace( /[xy]/g, function(c) { var r = (d + Math.random() * 16) % 16 | 0; d = Math.floor(d / 16); return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16); } ); return uuid; }, }, mounted(){ var username = this.generate_uuid(); console.log(username) this.testsocket = new WebSocket('ws://127.0.0.1:8000/ws/'+ username +'/') console.log(this.testsocket) this.testsocket.onmessage = (res) => { console.log('WS的返回結果',res.data); } // onopen 定義打開時的函數 // onclose 定義關閉時的函數 // onmessage 定義接收數據時候的函數 // this.testsocket.onopen = function(){ // console.log('開始連接socket') // }, // this.testsocket.onclose = function(){ // console.log('socket連接已經關閉') // } }}</script>

4.2服務端存儲用戶名以及websocketConsumer,然后給對應的用戶發送信息

from channels.generic.websocket import WebsocketConsumeruser_dict ={}list = []import jsonclass ChatService(WebsocketConsumer): # 當Websocket創建連接時 def connect(self): self.accept() username = self.scope.get('url_route').get('kwargs').get('username') user_dict[username] =self print(user_dict) # list.append(self) # 當Websocket接收到消息時 def receive(self, text_data=None, bytes_data=None): data = json.loads(text_data) print(data) to_user = data.get('to_user') message = data.get('message') ws = user_dict.get(to_user) print(to_user) print(message) print(ws) ws.send(text_data) # 當Websocket發生斷開連接時 def disconnect(self, code): pass

總結

到此這篇關于Django 實現 Websocket 廣播、點對點發送消息的文章就介紹到這了,更多相關Django 實現 Websocket 廣播、點對點發送消息內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Django
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美午夜精彩| 91精品在线免费视频| 欧美综合精品| 国产综合激情| 亚洲欧美日韩国产一区二区| 久久久久一区| 播放一区二区| 日本午夜大片a在线观看| 日本a口亚洲| 免费观看在线综合| 免费人成黄页网站在线一区二区| 国产情侣一区在线| 日韩av黄色在线| 精品国产麻豆| 中国字幕a在线看韩国电影| 日韩精品1区| 亚洲精品综合| 国产乱论精品| 国产精品精品国产一区二区| av一区在线| 最新亚洲国产| 国产精品yjizz视频网| 99国产精品久久久久久久| 亚洲国产影院| 国产日产一区| 国产成人免费| 97久久亚洲| 在线一区电影| 精品欧美日韩精品| 99精品在线免费在线观看| 亚洲精品乱码日韩| 国产成人免费视频网站视频社区| 亚洲国内欧美| 久久精品毛片| 性一交一乱一区二区洋洋av| 精品一区电影| 日韩区一区二| 蜜桃av一区二区三区电影| 国产日本久久| 亚洲精品一二三区区别| 国产情侣一区| 91国语精品自产拍| 精品三级久久| 日韩成人a**站| 日韩综合一区二区三区| 红桃视频国产一区| av不卡免费看| 久久影院一区| 久久九九精品| 日本一区二区免费高清| 日本午夜精品一区二区三区电影| 亚洲一区中文| 蜜桃久久久久久| 久久精品主播| 久久天堂精品| 99久久亚洲精品蜜臀| 中文字幕成在线观看| 精品一区二区三区中文字幕在线| 国产亚洲精品美女久久| 日韩综合一区二区| 国产精品免费99久久久| 蜜桃视频第一区免费观看| 女人av一区| 亚洲一区日韩| 国产精品一站二站| 久久国产三级| 黑丝一区二区三区| 美女久久久久| 欧美激情福利| 激情综合婷婷| 久久久成人网| 亚洲作爱视频| 日韩不卡一区二区| 国内精品美女在线观看| 婷婷综合亚洲| 日韩在线一二三区| 久久一区亚洲| 久久午夜影视| 国产一区国产二区国产三区 | 免费在线观看精品| 7777精品| 伊人网在线播放| 日韩av有码| 伊人精品一区| 久久精品色播| 日日夜夜免费精品视频| 91福利精品在线观看| 欧美xxxx中国| 亚洲伊人精品酒店| 日韩和欧美一区二区| 久久中文视频| 欧美一区91| 日本免费在线视频不卡一不卡二| 婷婷精品进入| 国产精品香蕉| 啪啪国产精品| 少妇精品久久久一区二区三区| 久久在线电影| 亚洲国产成人二区| 亚洲中字黄色| 亚洲毛片在线免费| 国产a久久精品一区二区三区| 老司机精品在线| 日韩高清电影免费| 日韩不卡视频在线观看| 日韩在线观看不卡| 国产日韩欧美三区| 视频精品一区二区| 成人精品亚洲| 欧美激情 亚洲a∨综合| 国产乱码精品| 日韩av中文在线观看| 亚洲人妖在线| 久久久久中文| 麻豆国产精品| 国产午夜一区| 亚洲精品乱码久久久久久蜜桃麻豆| 免费观看在线色综合| 亚洲欧洲高清| 国产成人在线中文字幕| 久久精品伊人| 国产精品magnet| 日韩中文一区二区| 视频一区日韩精品| 欧美激情91| av在线资源| 欧美日韩国产高清电影| 日本免费久久| 亚洲天堂久久| 国产自产自拍视频在线观看 | 久久久久91| 日韩大片在线观看| 水蜜桃精品av一区二区| 国产精品xx| 1024精品久久久久久久久| 亚洲va久久久噜噜噜久久| 国产黄色一区| 色88888久久久久久影院| 亚洲欧美久久久| 久久精品国产久精国产爱| 欧美久久天堂| 在线看片日韩| 国产日韩免费| 视频在线不卡免费观看| 99精品综合| 国产视频亚洲| 日韩视频一二区| 欧美三区四区| 精品1区2区3区4区| 日本大胆欧美人术艺术动态| 国产无遮挡裸体免费久久| 国内精品麻豆美女在线播放视频| 99久久视频| 国产欧美自拍一区| 久久久久久黄| 亚洲aa在线| 亚洲综合小说| 国产精品一区二区三区av麻| 成人日韩在线| 国产精品a级| 中文无码日韩欧| 国产精品亚洲成在人线| 久久精品亚洲人成影院| 欧美一区二区三区免费看| 香蕉成人av| 欧美在线不卡| 噜噜噜躁狠狠躁狠狠精品视频 | 国产一区二区视频在线看| 亚洲aa在线| 国产一区一一区高清不卡| 亚洲综合另类| av不卡免费看| 精品一区二区三区的国产在线观看| 蜜臀久久99精品久久久久久9| 国产一区国产二区国产三区| 久久三级毛片| 中文字幕一区二区三区在线视频| 久久亚洲欧美| 国产综合精品一区| 国产欧美日韩精品一区二区三区| 午夜精品影视国产一区在线麻豆| 日韩欧美另类一区二区| 欧洲一级精品| 国产精品国码视频| 日韩精品欧美精品| 亚洲精品在线国产| 亚洲高清不卡| 亚洲精品99| 欧美日韩国产在线观看网站| 午夜日韩av| 日韩亚洲精品在线观看| 日本aⅴ免费视频一区二区三区| 日韩国产在线一| 亚洲深夜影院| 日韩午夜av| 国产亚洲午夜| 免播放器亚洲一区| 国产精品久久777777毛茸茸| 欧美三级精品| 91久久在线|