websocket群聊实战
- 演示及源码地址:
演示地址: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群聊实战的更多相关文章
- Websocket 群聊功能
websocket 群聊 前提关闭防火墙 写入代码 from flask import Flask,request,render_template from geventwebsocket.handl ...
- WebSocket群聊与单聊
一 . WebSocket实现群聊 py文件代码 # py文件 from flask import Flask, render_template, request from geventwebsock ...
- websocket 群聊单聊
websocket 介绍 介绍引自 https://segmentfault.com/a/1190000012709475 群聊 from flask import Flask, request, r ...
- websocket 群聊,单聊,加密,解密
群聊 from flask import Flask, request, render_templatefrom geventwebsocket.handler import WebSocketHan ...
- React系列——websocket群聊系统在react的实现
前奏 这篇文章仅对不熟悉在react中使用socket.io的人.以及websocket入门者有帮助. 下面这个动态图展示的聊天系统是用react+express+websocket搭建的,很模糊吧, ...
- 一例完整的websocket实现群聊demo
前言 业余我都会花一些时间在tcp.http和websocket等领域的学习,现在觉得有点收获,所以把一个基于websocket的群聊功能的例子提供给大家玩玩.当然这是一个很完整的例子,包括webso ...
- websocket(二)--简单实现网页版群聊
websocket可以实现服务端的消息推送,而不必在客户端轮询,大大的节省的资源,对于实时通讯来说简直是个大喜讯. 在上一篇文章中介绍了协议握手,这篇文章将通过实现简单的群聊来帮助进一步了解webso ...
- WebSocket刨根问底(三)之群聊
前两篇文章[WebSocket刨根问底(一)][WebSocket刨根问底(二)]我们介绍了WebSocket的一些基本理论,以及一个简单的案例,那么今天继续,我们来看一个简单的群聊的案例,来进一步了 ...
- websocket 实现单聊群聊 以及 握手原理+加密方式
WebSocket 开始代码 服务端 群聊 # type:WebSocket 给变量标注类型 # websocket web + socket from geventwebsocket.server ...
- flask 第五章 WebSocket GeventWebsocket 单聊群聊 握手 解密 加密
1.WebSocket 首先我们来回顾一下,我们之前用socket学习过的项目有: 1.django 2.flask 3.FTP - 文件服务 HTTP - TCP (特点): 1.一次请求,一次响应 ...
随机推荐
- SpringCloud全链路灰色发布具体实现!
灰度发布(Gray Release,也称为灰度发布或金丝雀发布)是指在软件或服务发布过程中,将新版本的功能或服务以较小的比例引入到生产环境中,仅向部分用户或节点提供新功能的一种发布策略. 在传统的全量 ...
- 代码安全之代码混淆及加固(Android)🔒
代码安全之代码混淆及加固(Android) 目录 代码安全之代码混淆及加固(Android) 摘要 引言 正文 代码混淆 代码加固 总结 参考资料 摘要 本文将介绍如何通过代码混淆和加固来保护An ...
- CD74HC4067高速CMOS16通道模拟多路复用器实践
咱们在玩arduino或stm32.esp8266时,有时会遇到板子模拟口不够用的情况,这个时候CD74HC4067就派上用场了,它可以将16路数字/模拟信号通过4数字+1模拟=5口来读取. 这货长这 ...
- [PostgreSQL]在group by查询下拼接列字符串
首先创建group_concat聚集函数: CREATE AGGREGATE group_concat(anyelement) ( sfunc = array_append, -- 每行的操作函数,将 ...
- RLHF · PBRL | B-Pref:生成多样非理性 preference,建立 PBRL benchmark
论文题目:B-Pref: Benchmarking Preference-Based Reinforcement Learning,2021 NeurIPS Track Datasets and Be ...
- MySQL大表设计怎么做?
MySQL是一种常用的关系型数据库管理系统,它在处理大表时需要特别注意设计和优化.下面将详细介绍MySQL大表的设计原则和优化策略. 1. 数据库设计 数据库范式化:将数据按照规范的关系模型进行拆分和 ...
- tryhackme进攻性渗透测试-Advanced Exploitation 高级利用
Steel Mountain 侦察 Nmap -sC -sV -O $IP -oN basic_scan.nmap Nmap -script=vuln $IP -oN vuln_scan.nmap 总 ...
- C和C++练习
要点: 1.数组 2.冒泡排序BubbleSort 3.带指针的结构体(malloc,free) 4.字符串操作(拷贝.逆序.比较) 5.格式化输出printf,sprintf 6.格式化输入,sca ...
- 微调baichuan2-7b遇到的显存坑
问题描述: 微调baichuan2-7b模型,验证一轮后继续训练第一个iteration显存大幅增加 项目链接: https://github.com/wp931120/baichuan_sft_lo ...
- 5分钟攻略Spring-Retry框架实现经典重试场景
前言 今天分享干货,控制了篇幅,5分钟内就能看完学会. 主题是Spring-Retry框架的应用,做了一个很清晰的案例,代码可下载自测. 框架介绍 Spring-Retry框架是Spring自带的功能 ...