完整代码: https://gitee.com/mom925/django-system

项目结构:


先安装所需库:
pip install channels

下面将websocket作为插件一样的只需要引入配置的结构

asgi.py文件 http请求不变、修改websocket请求调用路径
import os
import django
from channels.http import AsgiHandler
from channels.routing import ProtocolTypeRouter, URLRouter
from . import routing os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Wchime.settings')
django.setup() application = ProtocolTypeRouter({
"http": AsgiHandler(),
"websocket": URLRouter(routing.websocket_urlpatterns),
})
同级目录下的请求路由文件 routing.py
from django.urls import path, re_path
from .consumers import RollCallConsumer, CustomRollCallConsumer websocket_urlpatterns = [
path('ws/', RollCallConsumer.as_asgi()),
re_path(r'ws/(?P<group>\w+)/', CustomRollCallConsumer.as_asgi()),
]
创建一个consumers.py 定义收发消息

import json

from channels.generic.websocket import AsyncJsonWebsocketConsumer
from channels.layers import get_channel_layer
from asgiref.sync import async_to_sync class RollCallConsumer(AsyncJsonWebsocketConsumer):
group_name = "default_group" async def connect(self):
await self.channel_layer.group_add(
self.group_name,
self.channel_name
)
await self.accept() async def disconnect(self, close_code):
await self.channel_layer.group_discard(
self.group_name,
self.channel_name
) async def receive(self, text_data=None, bytes_data=None, **kwargs):
await self.send(text_data) async def send(self, text_data=None, bytes_data=None, close=False):
await super(RollCallConsumer, self).send(text_data, bytes_data, close) async def push_messages(self, message):
message_type = message['default_group']
message = message['message']
data = {
'message_type': message_type,
'message': message
}
await self.send(json.dumps(data, ensure_ascii=False)) class CustomRollCallConsumer(AsyncJsonWebsocketConsumer):
group_name = "default_group" async def connect(self):
self.group_name = self.scope['url_route']['kwargs'].get('group', 'default_group')
await self.channel_layer.group_add(
self.group_name,
self.channel_name
)
await self.accept() async def disconnect(self, close_code):
self.group_name = self.scope['url_route']['kwargs'].get('group', 'default_group')
await self.channel_layer.group_discard(
self.group_name,
self.channel_name
) async def receive(self, text_data=None, bytes_data=None, **kwargs):
await self.send(text_data) async def send(self, text_data=None, bytes_data=None, close=False):
await super(CustomRollCallConsumer, self).send(text_data, bytes_data, close) async def push_messages(self, message):
message_type = message['default_group']
message = message['message']
data = {
'message_type': message_type,
'message': message
}
await self.send(json.dumps(data, ensure_ascii=False)) def send_message(group_name="default_group", message=None, message_type=None):
"""
WS广播: 外部函数调用
:param message_type: 消息类型
:param group_name: 组名称
:param message: 消息内容
:return:
"""
# print(get_channel_layer())
# print("send msg")
channel_layer = get_channel_layer()
async_to_sync(channel_layer.group_send)(
group_name,
{
'type': 'push.messages', # push_messages函数
'message': message,
'message_type': message_type
}
)

定义一个配置文件settings.py,里面主要是注册app,添加asgi等配置
import os
import sys
from django.conf import settings
from conf.env import *
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) ASGI_APPLICATION = 'websocket_plugin.asgi.application' # redis_host = "redis://" + REDIS_HOST + ":" + REDIS_PORT + "/" + REDIS_LIBRARY
redis_host = "redis://:" + REDIS_PWD + "@" + REDIS_HOST + ":" + REDIS_PORT + "/" + REDIS_LIBRARY
secret_k = 'wchime' CHANNEL_LAYERS = {
'default': {
'BACKEND': 'channels_redis.core.RedisChannelLayer',
'CONFIG': {
# 连接自己的redis
"hosts": [redis_host],
"symmetric_encryption_keys": [secret_k],
},
},
} apps = ['channels'] settings.INSTALLED_APPS += [app for app in apps if app not in settings.INSTALLED_APPS]
最后只要在Django项目的settings.py文件中引入配置即可

from plugin.websocket_plugin.settings import *

成功启动服务



Django中安装websocket的更多相关文章

  1. 利用dwebsocket在Django中使用Websocket

    一.Websockets介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信 ...

  2. django中实现websocket

    一.Websockets介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信 ...

  3. Django中使用websocket并实现简易聊天室

    django使用websocket并实现简易聊天室 django默认只支持http协议 如果你想让django即支持http协议又支持websocket协议,则需要做以下配置 前期配置 前提需要安装c ...

  4. Django中安装搜索引擎方法。

    全文检索 全文检索不同于特定字段的模糊查询,使用全文检索的效率更高,并且能够对于中文进行分词处理. haystack:全文检索的框架,支持whoosh.solr.Xapian.Elasticsearc ...

  5. django中安装pillow ValueError: zlib is required unless explicitly disabled using --disable-zlib, aborting

    在windows系统上,使用  pip install pillow安装pillow时 报错 在使用 easy_install Pillow 方式安装成功,默认是最高版本 如果需要在安装时,指定安装版 ...

  6. Django中的许可(Permissions)和用户组(Group)

    Reference: http://www.cnblogs.com/esperyong/archive/2012/12/20/2826690.html 接着上面的3篇讨论文章,我们阐述了Django中 ...

  7. 在阿里云的CentOS环境中安装django

    购买了一台阿里云主机.操作系统为CentOS 6.5.准备在上面跑Django做Web开发.因为CentOS自带的python版本号较低,安装Django先要安装新版本号python.还是费了点周折. ...

  8. day 61 Django part-1 django的安装,以及初学者三件套(以及settings中的mysql配置)

    我们的django到底是什么东西呢? 我们的代码都是在后台写的,包括我们的pycharm都是属于后台的工具,但是我们的后端开发说到底是需要开发完了之后拿到用户面前的,让我们的用户看到我们的东西,首先要 ...

  9. Django中redis的使用方法(包括安装、配置、启动)

    一.安装redis: 1.下载: wget http://download.redis.io/releases/redis-3.2.8.tar.gz 2.解压 tar -zxvf redis-3.2. ...

  10. 在Django中使用redis:包括安装、配置、启动。

    一.安装redis: 1.下载: wget http://download.redis.io/releases/redis-3.2.8.tar.gz 2.解压 tar -zxvf redis-.tar ...

随机推荐

  1. Avalonia 实现跨平台的IM即时通讯、语音视频通话(源码,支持信创国产OS,统信、银河麒麟)

    在 Avalonia 如火如荼的现在,之前使用CPF实现的简单IM,非常有必要基于 Avalonia 来实现了.Avalonia 在跨平台上的表现非常出色,对信创国产操作系统(像银河麒麟.统信UOS. ...

  2. 学生开发者勇担青年使命,用AI守护少数人的“视界”

    本文分享自华为云社区<[先锋开发者云上说]学生开发者勇担青年使命,用AI守护少数人的"视界">,作者:华为云社区精选 . 青年动人之处,在于他们的勇气,和非凡的创造探索 ...

  3. .NET企业应用安全开发动向-概览

    太长不读版:试图从安全的全局视角触发,探讨安全的重要性,讨论如何识别安全问题的方法,介绍.NET提供的与安全相关的基础设施,以及一些与时俱进的安全问题,为读者建立体系化的安全思考框架. 引言 关于&q ...

  4. mybatis_高级

    注解方式: 不需要配置文件 @select等注解直接放在接口mapper里 多表操作: @Select("select * from user1") @Results({ @Res ...

  5. 如何基于 k8s做私有化部署

    公众号「架构成长指南」,专注于生产实践.云原生.分布式系统.大数据技术分享. 随着国内数字化转型的加速和国产化进程推动,软件系统的私有化部署已经成为非常热门的话题,因为私有化部署赋予了企业更大的灵活和 ...

  6. Oracle密码文件、警告日志文件、跟踪文件

    密码文件 oracle用于验证sysdba权限的二进制文件. 警告日志文件 警告日志文件是用来记录oracle数据库系统在运行期间的各种信息: oracle实例打开和关闭.建立表空间.增加数据文件等记 ...

  7. 华企盾DSC无法从网页下载客户端(无法访问web端)

    解决方法1:服务器安装目录需要安装在英文目录,否则DSCApache.exe会启动不了,导致无法访问5580网页. 解决方法2:5580端口占用也会导致DSCApache.exe启动不了,可打开服务器 ...

  8. electron入门之打包exe分发(五)

    electron入门到入土,前面配置阿里镜像加速.为了防止我们打包下载龟速,所以需要给electron配置阿里镜像加速.参考配置阿里云镜像https://blog.csdn.net/weixin_44 ...

  9. CUDA驱动深度学习发展 - 技术全解与实战

    全面介绍CUDA与pytorch cuda实战 关注TechLead,分享AI全维度知识.作者拥有10+年互联网服务架构.AI产品研发经验.团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云 ...

  10. K8S系列一:概念入门

    K8S系列一:概念入门 写在前面 本文组织方式: K8S的架构.作用和目的.需要首先对K8S整体有所了解. K8S是什么? 为什么是K8S? K8S怎么做? K8S的重要概念,即K8S的API对象.要 ...