基于Fastapi的区分聊天房间的聊天转发功能接口示例
基于房间码(eCode)和用户uid,区分不同的聊天房间进行消息转发。
前端将收到的消息根据房间码(eCode)过滤到不同的聊天记录显示页面
后端demo代码如下:
from fastapi import FastAPI, HTTPException, Body, WebSocketDisconnect
from starlette.websockets import WebSocket
active_connections: Dict[str, WebSocket] = {}
# 使用字典管理不同房间的客户端列表
clients_rooms = {}
@app.websocket("/ws/chat")
async def test_endpoint(websocket: WebSocket):
# 获取参数 /ws/chat?uid=123&eCode=abc
uid = websocket.query_params.get("uid")
eCode = websocket.query_params.get("eCode")
print(uid)
# 如果参数为空,关闭连接
if uid is None:
await websocket.close()
return
# 接受连接
await websocket.accept()
# 如果房间不存在,创建新房间
if eCode not in clients_rooms:
clients_rooms[eCode] = []
# 将当前客户端加入对应房间
clients_rooms[eCode].append(websocket)
print(f"Room {eCode} clients:", clients_rooms[eCode])
# 处理连接
print("WebSocket connected:", websocket.client)
try:
# 循环接收消息
while True:
# 接收消息
data = await websocket.receive_text()
print(data)
# 解析消息
data = json.loads(data)
# 转发消息给房间内的其他客户端
for client in clients_rooms[eCode].copy():
# 排除自己
if client != websocket:
try:
# 转发给除了自己的其他客户端
await client.send_text(json.dumps(data))
except Exception as e:
print(f"Error sending message: {e}")
clients_rooms[eCode].remove(client)
except WebSocketDisconnect:
print("Client disconnected")
finally:
# 移除断开的客户端
if websocket in clients_rooms[eCode]:
clients_rooms[eCode].remove(websocket)
# 如果房间为空,删除房间
if not clients_rooms[eCode]:
del clients_rooms[eCode]
基于Fastapi的区分聊天房间的聊天转发功能接口示例的更多相关文章
- 与众不同 windows phone (31) - Communication(通信)之基于 Socket UDP 开发一个多人聊天室
原文:与众不同 windows phone (31) - Communication(通信)之基于 Socket UDP 开发一个多人聊天室 [索引页][源码下载] 与众不同 windows phon ...
- 与众不同 windows phone (30) - Communication(通信)之基于 Socket TCP 开发一个多人聊天室
原文:与众不同 windows phone (30) - Communication(通信)之基于 Socket TCP 开发一个多人聊天室 [索引页][源码下载] 与众不同 windows phon ...
- nodejs构建多房间简易聊天室
1.前端界面代码 前端不是重点,够用就行,下面是前端界面,具体代码可到github下载. 2.服务器端搭建 本服务器需要提供两个功能:http服务和websocket服务,由于node的事件驱动机制, ...
- 基于tcp和多线程的多人聊天室-C语言
之前在学习关于网络tcp和多线程的编程,学了知识以后不用一下总绝对心虚,于是就编写了一个基于tcp和多线程的多人聊天室. 具体的实现过程: 服务器端:绑定socket对象->设置监听数-> ...
- 基于PHP实现一个简单的在线聊天功能(轮询ajax )
基于PHP实现一个简单的在线聊天功能(轮询ajax ) 一.总结 1.用的轮询ajax 二.基于PHP实现一个简单的在线聊天功能 一直很想试着做一做这个有意思的功能,感觉复杂的不是数据交互和表结构,麻 ...
- 基于websocket实现的一个简单的聊天室
本文是基于websocket写的一个简单的聊天室的例子,可以实现简单的群聊和私聊.是基于websocket的注解方式编写的.(有一个小的缺陷,如果用户名是中文,会乱码,不知如何处理,如有人知道,请告知 ...
- 用Python基于Google Bard做一个交互式的聊天机器人
用Python基于Google Bard做一个交互式的聊天机器人 之前已经通过浏览器试过了 Google Bard ,更多细节请看: Try out Google Bard, Will Google ...
- 模拟QQ聊天与视频聊天同时进行-------java基础知识总结
前言:多线程的知识 代码: package com.day13.math; /** * 类说明 :模拟QQ聊天与视频聊天同时进行 * @author 作者 : chenyanlong * @versi ...
- 基于.NET CORE微服务框架 -surging的介绍和简单示例 (开源)
一.前言 至今为止编程开发已经11个年头,从 VB6.0,ASP时代到ASP.NET再到MVC, 从中见证了.NET技术发展,从无畏无知的懵懂少年,到现在的中年大叔,从中的酸甜苦辣也只有本人自知.随着 ...
- 基于ZedBoard的Webcam设计(一):USB摄像头(V4L2接口)的图片采集【转】
转自:http://www.cnblogs.com/surpassal/archive/2012/12/19/zed_webcam_lab1.html 一直想把USB摄像头接到Zedboard上,搭建 ...
随机推荐
- 工作必会的Nginx的启动安装和常用配置例子
概述 由于自己的之前学习 nginx 只会简单使用,然后每次配置 nginx 都要找文档去了解怎么配置,有点麻烦,所以这里记录下一些常用的nginx 配置和配置的例子,到时候直接 copy 修改即可. ...
- godoc使用方法介绍
一.go doc简介 Godoc是go语言的文档化工具,类似于文档化工具godoc,类似于Python的Docstring和Java的Javadoc Godoc通过解析包含注释的Go代码来生成HTML ...
- MFC非模态对话框的关闭
如果要在点击按钮的情况下,销毁非模态对话框,只需要把按钮的事件映射到OnCancel函数, 里面调用DestroyWindow(), 然后重写PostNCDestroy(), delete 指针. 另 ...
- Math类、System类--java进阶day05
1.Math类 Math类里所有方法都被static修饰,说明它是一个工具类,不需要创建对象,直接类名调用 2.Math方法展示 . 3.System类 SYstem方法展示 1.currentTim ...
- 多态的成员访问特点和好处--java进阶day02
1.多态的成员访问特点 1.成员变量访问特点 分为两个阶段,编译阶段,系统会看父类中是否存在该成员变量,如果存在,运行阶段就会使用父类的成员变量,否则报错 当我们在父类中删去num时,编译直接报错 2 ...
- devops 2024
What is DevOps? DevOps is a mindset, a culture, and a set of technical practices. It provides commun ...
- ArrayBlockingQueue的take()底层原理
一.ArrayBlockingQueue 的 take() 方法的底层源码的详细介绍 ArrayBlockingQueue 是 Java 并发包 (java.util.concurrent) 中的一个 ...
- 🧠 Model Context Protocol(MCP)详解:AI 编程新时代的“USB 接口
目标读者:具备一定编程基础,但尚未涉足 AI 编程的开发者 本文目的:帮助你理解 MCP 的核心概念.技术优势.运作机制,并指导你如何使用 MCP 构建智能体项目. 什么是 MCP? MCP,全称 M ...
- Cursor入门教程-JetBrains过度向
Cursor使用笔记 前置:之前博主使用的是JetBrains的IDE,VSCode使用比较少,所以会尽量朝着JetBrains的使用习惯及样式去调整. 一.设置语言为中文 如果刚上手Cursor,那 ...
- 没几个人需要了解的JDK知识,我却花了3天时间研究
目前国内发布自己JDK版本的几家公司: 腾讯和阿里是因为有Java应用和云业务,所以在优化发布自己的版本 华为也是因为Java应用和云业务,不过因为还有服务器业务,所以还有Java课题的跑分需求,如S ...