最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django和websocket實現(xiàn)簡單的多人聊天的示例代碼

 更新時間:2025年01月10日 10:02:28   作者:jjw_zyfx  
本文主要介紹了使用Django和WebSocket實現(xiàn)一個簡單的多人聊天應(yīng)用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1、版本及環(huán)境 python 為3.9.12, django為4.2詳細信息如下:

asgiref           3.8.1
attrs             24.2.0
autobahn          24.4.2
Automat           24.8.1
cffi              1.17.1
channels          3.0.3
constantly        23.10.4
cryptography      44.0.0
daphne            3.0.2
Django            4.2
hyperlink         21.0.0
sqlparse          0.5.3
tomli             2.2.1
Twisted           24.11.0
txaio             23.1.1
typing_extensions 4.12.2
tzdata            2024.2
zope.interface    7.2

Django安裝指定版本(上邊的安裝包也有可能安裝多了,但必須要有python,Django, channels)

pip install django==4.2 -i https://pypi.tuna.tsinghua.edu.cn/simple

2、創(chuàng)建Django項目

django-admin startproject ws_demo
python manage.py startapp app01

3、安裝channels

pip install channels==3.0.3 -i  -i https://pypi.tuna.tsinghua.edu.cn/simple

4、項目整體目錄結(jié)構(gòu)如下:

在這里插入圖片描述

5、配置setting文件

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    "channels",   # 添加channels
    "app01.apps.App01Config"   # 添加app01
]

# 在setting最后添加一個 "ws_demo.asgi.application" 意思是"項目名稱.asgi文件.application變量名稱"
ASGI_APPLICATION = "ws_demo.asgi.application"

6、asgi.py文件中的內(nèi)容如下;

import os
from channels.routing import ProtocolTypeRouter, URLRouter
# from django.conf.urls import url
# from chat import consumers
from django.core.asgi import get_asgi_application
from . import routings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'ws_demo.settings')
# application = get_asgi_application()
application = ProtocolTypeRouter({
    "http": get_asgi_application(),
    'websocket': URLRouter(routings.websocket_urlpatterns)
})

7、新建routings.py文件,其內(nèi)容如下:

from django.urls import re_path
from app01 import consumers

websocket_urlpatterns = [
    # 示例 url : xxxxx/room/x1/
    re_path(r"room/(?P<group>\w+)/$", consumers.ChatConsumer.as_asgi())
]

8、ws_demo下的urls.py中的內(nèi)容如下:

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

urlpatterns = [
    # path("admin/", admin.site.urls),
    path('index/', views.index),
]

9、在app01應(yīng)用下新建templates目錄,并在其下新建index.html,其內(nèi)容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .message {
            height: 300px;
            border: 1px solid #dddddd;
            width: 100%;
        }
    </style>
</head>

<body>
<div class="message" id="message"></div>
<div>
    <input type="text" placeholder="請輸入" id="txt">
    <input type="button" value="發(fā)送" onclick="sendMsg()">
    <input type="button" value="關(guān)閉連接" onclick="closeConn()">
    <input type="button" value="重新建立連接" onclick="connect()">
</div>

<script>
    var socket = null;
    function connect() {
        socket = new WebSocket("ws:/127.0.0.1:8000/room/123/");

        // 連接完成以后 客戶端自動觸發(fā)
        socket.onopen = function (event) {
            let tag = document.createElement("div")
            tag.innerHTML = "連接已建立"
            document.getElementById("message").appendChild(tag)
        }

        // 回調(diào)函數(shù) 當(dāng)服務(wù)端有消息發(fā)送到時,自動觸發(fā)
        socket.onmessage = function (event) {
            console.log(event.data);
            let tag = document.createElement("div");
            tag.innerText = event.data;
            document.getElementById("message").appendChild(tag)
        }

        // 當(dāng)連接關(guān)閉時,觸發(fā)
        socket.onclose = function (event) {
            let tag = document.createElement("div")
            tag.innerHTML = "連接已斷開"
            document.getElementById("message").appendChild(tag)

        }
    }
    function sendMsg() {
        let tag = document.getElementById("txt")
        socket.send(tag.value)
    }
    function closeConn() {
        // 向服務(wù)端發(fā)送斷開連接
        socket.close();
    }
    connect()
</script>
</body>
</html>

10、在app01應(yīng)用下新建consumers.py文件其內(nèi)容如下:

from channels.generic.websocket import WebsocketConsumer
from channels.exceptions import StopConsumer

#  簡單版群聊就是定義個數(shù)組,并在連接時把對象添加到數(shù)組內(nèi),在斷開鏈接時移除對象
CONN_LIST = []

class ChatConsumer(WebsocketConsumer):  # 繼承WebsocketConsumer
   def websocket_connect(self, message):
       print("有人進行連接了。。。。")
       CONN_LIST.append(self)
       # 有客戶端向后端發(fā)送 WebSocket 連接的請求時,自動觸發(fā)(握手)
       self.accept()

   def websocket_receive(self, message):
       # 瀏覽器基于 WebSocket 向后端發(fā)送數(shù)據(jù),自動觸發(fā)接收消息
       print(message)
       #  一對一聊天
       # if message["text"] == "close":
       #     self.send("服務(wù)端主動關(guān)閉連接")
       #     #  服務(wù)端主動關(guān)閉連接
       #     self.close()
       # self.send(message["text"])
       for conn in CONN_LIST:
           conn.send(message["text"])



   def websocket_disconnect(self, message):
       # 客戶端向服務(wù)端斷開連接時,自動觸發(fā)
       CONN_LIST.remove(self)
       print("連接斷開?。?)
       raise StopConsumer()

11、運行項目 在項目根目錄下執(zhí)行:

python manage.py runserver

12、至此即可在瀏覽器中進行簡單的多人聊天,結(jié)果如下:

在這里插入圖片描述

在這里插入圖片描述

到此這篇關(guān)于Django和websocket實現(xiàn)簡單的多人聊天的示例代碼的文章就介紹到這了,更多相關(guān)Django websocket多人聊天內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 手把手教你Python抓取數(shù)據(jù)并可視化

    手把手教你Python抓取數(shù)據(jù)并可視化

    很多小伙伴在提到python數(shù)據(jù)可視化的時候第一反應(yīng)就是matplotlib庫,但實際上python還有很多很好用的數(shù)據(jù)可視化的庫,下面這篇文章主要給大家介紹了關(guān)于如何利用Python抓取數(shù)據(jù)并可視化的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • Python中如何使用Pandas庫自定義函數(shù)

    Python中如何使用Pandas庫自定義函數(shù)

    Pandas是Python中用于數(shù)據(jù)分析和處理的強大庫,它提供了豐富的功能,可以輕松地處理各種類型的數(shù)據(jù),在實際應(yīng)用中,我們經(jīng)常需要對數(shù)據(jù)進行復(fù)雜的轉(zhuǎn)換、計算或聚合操作,而這些操作往往不能僅靠Pandas內(nèi)置的函數(shù)完成,這時,自定義函數(shù)就顯得尤為重要
    2025-01-01
  • Python?webargs?模塊的簡單使用

    Python?webargs?模塊的簡單使用

    webargs是一個用于解析和驗證HTTP請求對象的Python庫,今天通過本文給大家介紹Python?webargs?模塊的安裝使用,感興趣的朋友一起看看吧
    2022-01-01
  • 用Python實現(xiàn)最速下降法求極值的方法

    用Python實現(xiàn)最速下降法求極值的方法

    今天小編就為大家分享一篇用Python實現(xiàn)最速下降法求極值的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python實現(xiàn)切割mp3片段并降低碼率

    Python實現(xiàn)切割mp3片段并降低碼率

    MoviePy是一個基于Python的視頻編輯庫,它提供了創(chuàng)建、編輯、合并、剪輯和轉(zhuǎn)換視頻的功能,所以本文主要介紹如何使用moviepy來分割音頻流并降低碼率,感興趣的可以了解下
    2023-08-08
  • python3中的類繼承你真的了解嗎

    python3中的類繼承你真的了解嗎

    這篇文章主要為大家詳細介紹了python3中的類繼承,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • python?中的?module?和?package

    python?中的?module?和?package

    這篇文章主要介紹了?python?中的?module?和?package?,文章基于Python的相關(guān)資料展開對主題的詳細介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-04-04
  • 39條Python語句實現(xiàn)數(shù)字華容道

    39條Python語句實現(xiàn)數(shù)字華容道

    這篇文章主要為大家詳細介紹了39條Python語句實現(xiàn)數(shù)字華容道,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • Python+PyQT5的子線程更新UI界面的實例

    Python+PyQT5的子線程更新UI界面的實例

    今天小編就為大家分享一篇Python+PyQT5的子線程更新UI界面的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • python 畫出使用分類器得到的決策邊界

    python 畫出使用分類器得到的決策邊界

    這篇文章主要介紹了python 畫出使用分類器得到的決策邊界,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08

最新評論

淄博市| 太和县| 台中县| 马公市| 江安县| 阜宁县| 广水市| 浮梁县| 永善县| 金沙县| 孟连| 怀宁县| 海口市| 宿松县| 会同县| 潞西市| 利川市| 河池市| 宁海县| 应城市| 东港市| 秭归县| 海晏县| 谢通门县| 恩平市| 托克逊县| 防城港市| 色达县| 杨浦区| 渑池县| 宁晋县| 漳州市| 上饶市| 东阳市| 陈巴尔虎旗| 综艺| 云林县| 日土县| 张家川| 都匀市| 高雄县|