使用Python与websocket实现在线聊天

一 前言

项目地址:https://github.com/Pidbid/python_chat

最近自己所做的项目需要一个聊天的功能,但是目前可用的有网易的IM以及其他公司提供的功能都很好用,但是出于练手的目的,所以重新写了一个简单的聊天功能,相当于制作轮子?

1.1 采用的技术栈

Python:

Fastapi 一个写API的框架

websocket_server 一个简单的框架,用来搭建websocket服务端

jose 用来做jwt验证的第三方库

Html+js+css

Cookies 一个第三方cookies的js库,用法简单:如Cookies.get(“token”)

二 实现思路

后台采用python的fastapi作为框架(其实在整个实现的过程中什么作为网页框架并不重要),通信协议采用websocket,由于主要实现的是聊天的功能,其他的并不重要,所以就简单的不使用数据库的情况下进行设计。ok,那我们开始吧~

三 数据预设

3.1 数据简介

一个简单的聊天功能,需要的数据有:用户数据,传输数据两方面

3.1.1 用户数据简介

用户存储在data文件夹下的users.json文件内

3.1.2 传输数据简介

在采用python的websockets_server模块下,不需要关心websocket传输的流数据,只需要关注发送的字符串数据即可。

1) 用户登录数据

  {"status":"login","name":"wicos","avatar":"static/image/user.png"}

2) 用户登出数据

 {"status":"logout","name":"wicos"}

3) 用户聊天数据

 {"status":"chat","from":"wicos1","to":"wicos","data":"发送的其他信息"}

四 详细流程

 

4.1 ws 服务端流程

4.1.1 ws服务端主流程

服务端的主流程运行在一个子线程内,用户打开ws连接后,将用户的连接实例存储,存储之后等待用户的登录信息,之后更新再已存储的用户变量内,如果登出,则在用户变量内删除该用户实例。如果用户发送的status为chat的json数据,则将该信息放入另外一个子线程内,该子线程循环的将“数据池”内的聊天消息发送给在线且用户名符合的用户。

4.2.2 ws服务端循环流程

循环流程运行在另外一个线程内,在该循环流程内,实时监控是否有用户发送消息至“消息池”,如果有的话就将消息发送给符合的用户。

4.2 ws用户端流程

在用户登录后,使用reconnect_websocket的js库进行ws链接,发送登录信息,之后开始聊天流程

五 截图介绍

用户登录界面

 

六 鸣谢

七 总结
总的来说不算简单,但是前端采用jq开发的话效率是真的慢(Ps:我不会承认我的jq很菜),anyway,后面会继续更新这个项目
歪克士 wicos      2021年11月16日
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇