首页 > 其他分享 >websocket群聊实战

websocket群聊实战

时间:2023-04-30 18:23:10浏览次数:29  
标签:实战 websocket self chat 群聊 message type channel

  • 演示及源码地址:

    演示地址:https://www.wchime.xyz/#/

    后端代码:https://gitee.com/mom925/wchime-web-api

    前端代码:https://gitee.com/mom925/uniapp-web

  • 项目说明

    项目技术:django+mysql+uwsgi+nginx+uniapp

    逻辑:以django搭建一个websocket服务器,前端用户连接websocket,进入同一群聊实现在线实时聊天

    演示图:

               

  •  主要代码说明

 

    搭建websocket代码

    

from channels.generic.websocket import WebsocketConsumer
from channels.exceptions import StopConsumer
from asgiref.sync import async_to_sync
import json


class RollCallConsumer(WebsocketConsumer):
    def websocket_connect(self, message):
        # 接收这个客户端的连接
        self.accept()
        # 将这个客户端的连接对象加入到某个地方(内存 or redis)1314 是群号这里写死了
        async_to_sync(self.channel_layer.group_add)('1314', self.channel_name)

    def websocket_receive(self, message):
        # 浏览器基于websocket向后端发送数据,自动触发接收消息
        # data = json.loads(message['text'])
        # chat_type = data.get('chat_type')
        # chat_id = data.get('chat_id')
        # chat_content = data.get('message')
        # print('chat_type', chat_type)
        # if chat_type == 'add_chat':
        #     async_to_sync(self.channel_layer.group_add)(chat_id, self.channel_name)

        # 通知组内的所有客户端,执行 chat_message 方法,在此方法中自己可以去定义任意的功能。

        async_to_sync(self.channel_layer.group_send)('1314', {"type": 'chat.message', 'message': message})

    # 这个方法对应上面的type,意为向1314组中的所有对象发送信息
    # 回调的方法
    def chat_message(self, event):
        text = event['message']['text']
        self.send(text)

    def websocket_disconnect(self, message):
        data = json.loads(message['text', '{}'])
        chat_id = data.get('chat_id')
        # 断开链接要将这个对象从 channel_layer 中移除
        async_to_sync(self.channel_layer.group_discard)(chat_id, self.channel_name)
        raise StopConsumer()

 

  django项目此时需要以asgi启动websocket,部署后可用daphne启动asgi

 

 

 

 

 

 

 

 

标签:实战,websocket,self,chat,群聊,message,type,channel
From: https://www.cnblogs.com/moon3496694/p/17365470.html

相关文章

  • 答题积分小程序云开发实战-界面交互篇:答题页布局样式与逻辑交互开发
    微信小程序云开发实战-答题积分赛小程序界面交互篇:答题页布局样式与逻辑交互开发答题页原型稿实现思路分析:1)答题未选中状态;2)答题已选中状态,点击确定提交选中结果;3)显示答案以及题目解析,如回答正确,自动进入下一题;如回答错误,停留在当前答题页面;4)每次答完10题,答对分数才会计入积分;5)最后......
  • Nginx 入门实战(2)--简单使用
    本文主要介绍Nginx的实际使用,文中所使用到的软件版本:Centos7.9.2009、Nginx1.22.1。1、环境准备这里主要演示使用Nginx代理Http及TCP应用,环境信息如下:主机用途Http端口TCP端口10.49.196.30部署Http、TCP应用8080909010.49.196.31部署Http、TCP......
  • Django4全栈进阶之路23 项目实战(报修类型表):应用程序命名空间app_name和分页组件pagina
    1、应用程序命名空间app_namefromdjango.urlsimportpathfrom.importviewsfrom.viewsimportRepairDetailViewapp_name='repair'urlpatterns=[path('repair_types/',views.RepairTypeListView.as_view(),name='repair_type_list�......
  • Docker实战笔记4-安装jenkins
    文章目录拉取jenkins镜像排查问题验证结果总结拉取jenkins镜像在官方镜像仓库查询jenkins镜像https://hub.docker.com/r/jenkins/jenkins拉取镜像dockerpulljenkins/jenkins结果如下:zhao@sh-zhao~%dockerpulljenkins/jenkins:latestlatest:Pullingfromjenkins/j......
  • websocket如何建立
    websocket是什么WebSocket是一种计算机通信协议,它提供了在单个TCP连接上进行全双工通信的能力。它允许客户端和服务器之间进行实时数据交换,可以用于实现在线游戏、聊天室、股票市场等需要实时通信的应用程序。WebSocket协议是HTML5规范的一部分,支持大部分现代浏览器。如何建立......
  • Django4全栈进阶之路20 项目实战(三种方式开发部门管理):方式一:FBV
    1、模型fromdjango.dbimportmodelsfromdjango.contrib.auth.modelsimportUser#Createyourmodelshere.classDepartment(models.Model):name=models.CharField(max_length=255,verbose_name='部门名称')parent=models.ForeignKey('sel......
  • Vue实战案例
    Vue项目案例结合之前学习的vue.js、脚手架、vuex、vue-router、axios、elementui等知识点,来开发前端项目案例(仅前端不含后端)。1.项目搭建其实就是将我们项目需要用到的组件都安装并配置好,需要做的事有:创建项目&运行项目vuecreate项目名称npmrunserveWebStorm集......
  • 【专栏精选】实战:动态配置图片
    本文节选自洪流学堂公众号技术专栏《大话Unity2019》,未经允许不可转载。洪流学堂公众号回复专栏,查看更多专栏文章。洪流学堂,让你快人几步。你好,我是郑洪智。小新:“大智,最近我在做一个虚拟展厅的demo,你说我怎么最大程度提高这个程度的扩展性呢?最好图片和文字说明是可以动态替换的。......
  • 【专栏精选】实战:使用LeanCloud上传玩家分数,实现排行榜
    本文节选自洪流学堂公众号技术专栏《大话Unity2019》,未经允许不可转载。洪流学堂公众号回复专栏,查看更多专栏文章。洪流学堂,让你快人几步。你好,我是郑洪智。小新:“有了用户登录后,我们总要拿来做点什么事情吧?”大智:“有了用户登陆信息之后,就可以针对用户来存储他自己的信息了,比如......
  • 【专栏精选】实战:百度语音合成
    本文节选自洪流学堂公众号技术专栏《大话Unity2019》,未经允许不可转载。洪流学堂公众号回复语音识别获取源码工程。洪流学堂,让你快人几步。你好,我是郑洪智。大智:“昨天我们实战了语音识别,在人工智能的语音领域,还有很大一块是语音合成,也就是TexttoSpeech,文字转语音。”小新:“是不......