zoukankan      html  css  js  c++  java
  • Django中,websocket实时通信设置概要

    在原有的Django项目中,增加实时通信的功能,用websocket实现,简单记录一下过程,备忘。

    1、安装channels、channels-redis、django-redis。

    2、在主应用magic_chat目录下新建rounting.py,配置application值。

    3、在应用chat_msg目录下新建rounting.py,配置websocket_urlpatterns。

    4、在应用chat_msg目录下新建consumers.py,主要逻辑处理都是在这里,相当于views.py。

    5、settings里面设置:APP中加入channels;REDIS_HOST、REDIS_PORT;ASGI_APPLICATION、CHANNEL_LAYERS。

    6、在主应用magic_chat目录下新建utils目录,在utils目录下新建token_auth.py,放token鉴权的代码(针对websocket);能生效是因为magic_chat/rounting.py里面配置了application的属性。

    7、开始编写consumers.py代码。consumers.py主要就是ChatConsumer类,里面有connectdisconnect eceive等函数。

    (1)connect函数,Websocket连接。用到了redis.set_user_status函数(在magic_chat/utils新建redis.py,里面是读写redis数据库的代码)。

    (2)disconnect函数,断开Websocket连接。

    (3)receive函数,服务端接收到消息后的处理;写入长期数据库,并发送websocket消息,即兼容离线和在线用户的使用;用到了下面写的chat_message函数(发送实时消息)。

    (4)chat_message函数,给 group 中的用户发送一次消息。

    8、开启服务(runserver),开始测试。

    9、需要用chrome浏览器的扩展程序smart web client来测,下载安装此插件。

    10、smart web client中输入地址,格式如下:ws://127.0.0.1:8000/ws/chat/?token=bc1190581ede19fb34b84ead5faf1a2452b1e13e

    点“connect”连接。

     

    11、ws连接不上的原因:

    (1)报错:“Failure instance: Traceback: <class 'ValueError'>: dictionary update sequence element #0 has length 1; 2 is required”,

    原因:token没给出或错误;

    解决办法:拿到正确token,以正确格式输入

    (2)报错:“redis.exceptions.ConnectionError:”,

    原因:redis服务没启动;

    解决办法:a.(貌似很麻烦,而且得在linux下)

    <1>装docker,

    <2>下镜像https://hub.docker.com/_/redis/,  

    <3>起redis服务:

    $ docker run --name some-redis -d redis

    b. <1>下载并安装Redis-x64-3.0.503.msi,地址:https://github.com/MicrosoftArchive/redis/releases

    <2>安装完成后,启动服务(找到安装路径,双击redis-cli.exe文件即可)

     

    12、在smart web client发送的字段类似下面(注意必须用双引号):

    {"message":"Are you busy today?","to_user_id":"222"}

  • 相关阅读:
    峰哥说技术:14-Spring Boot异常处理方案源码解析与实践
    峰哥说技术:13-Spring Boot ControllerAdvice处理全局异常
    峰哥说技术:12-Spring Boot文件上传
    峰哥说技术:11-Spring Boot返回JSON
    Vant+小程序+购物车实例
    Element-ui框架Tree树形控件切换高亮显示选中效果
    Element-ui框架checkbox复选框回显
    Vue+Element-ui+DateTimePicker 日期时间选择器传值给后台
    Vue+Element+Select获取选中的对象
    Vue+Element+computed实现购物车
  • 原文地址:https://www.cnblogs.com/djlbolgs/p/12780527.html
Copyright © 2011-2022 走看看