大家有用 Python 做 websocket 的案例吗?现在要做一个实时弹幕系统或者即使聊天系统。

2017-07-18 11:29:14 +08:00
 vZexc0m
现在想用 gevent-websocket 或者 tornado 做,请问有相关的例子或教程吗?或者提供一下后端设计思路。
8842 次点击
所在节点    Python
26 条回复
pyengwoei
2017-07-18 11:35:46 +08:00
我有个项目,用 Python 抓过 websocket 的数据
zhengxiaowai
2017-07-18 11:52:13 +08:00
tornado 自带 websocket 特别简单,以前用 websocket 做过一个实时日志
wwqgtxx
2017-07-18 11:52:25 +08:00
直接用 socket.io 会简单很多
mytsing520
2017-07-18 12:03:03 +08:00
http://tu.dog
timwei
2017-07-18 12:03:23 +08:00
简单聊天系统的架构: 起一个 Web 服务、一个 WebSocket 服务、一个 database

基本上是用 database 做服务间的数据共享,我是用 Redis

用户透过 Web 服务做验证、取得大厅或房间数据

从大厅进入房间后,渲染 WebSocket 的客端 JS 代码,带用户 Token 联接 WebSocket 服务
sanmmmm
2017-07-18 12:14:22 +08:00
个人项目用过  flask + socketio,感觉还行.
lolizeppelin
2017-07-18 12:49:47 +08:00
抄 openstack 的 vnc 服务
awanabe
2017-07-18 12:59:54 +08:00
@sanmmmm flask + socketio 是怎么部署的,uwsgi 对 socketio 不友好。。好像只能用 gevent
arischow
2017-07-18 13:03:03 +08:00
Flask-SocketIO 不错
NaVient
2017-07-18 16:30:51 +08:00
弹幕系统类似全站广播 用 rabbitmq stomp+ sockjs 做很容易的
fy
2017-07-18 16:36:58 +08:00
tornado 或 aiohttp:原生 ws
sockjs + tornado:比较稳的方案
flask:在 tornado 或 gevent 上跑 flask

一个老早前写的例子:
https://github.com/fy0/chat

我是万年 tornado 用户,现在在考虑转 aiohttp。
maxxxxx
2017-07-18 16:40:52 +08:00
就用 gevent-websocket 起了服务之后在 rerequest 里面取 wsgi.websocket 就好啦
sanmmmm
2017-07-18 18:09:49 +08:00
@awanabe 挺早之前写的,忘了是用的哪个容器了.f lask 插件就哪个f lask-socketio
caniuse
2017-07-18 21:27:37 +08:00
多少用户同时在线??
vZexc0m
2017-07-19 15:31:06 +08:00
@maxxxxx 这个怎么取得用户信息和监控 websocket 的连接与关闭
vZexc0m
2017-07-19 21:29:36 +08:00
@timwei 我想知道是怎么做的数据共享,还有 socket 怎么带 token。
timwei
2017-07-20 09:28:41 +08:00
1. 两个服务共用一个数据库
2. send()的时候带上 token 即可
vZexc0m
2017-07-20 09:37:02 +08:00
@timwei 感谢回复。我想的是用户通过一个短连接发送消息存入数据库,然后这个长连接能够实时获取用户发送的消息,然后发送给客户端。请问有什么好的实现方式吗
timwei
2017-07-20 12:26:19 +08:00
@vZexc0m
"送消息存入数据库"、"服务推送到各客户端" 都是通过 WebSocket 的连接

客端来看,分别对应到 send()跟 onmessage()

服务端来看,当客端 send()消息来时,存入数据库,并且对每个连接的客端推送消息的内容

流程整体会是
1. 建立 WebSocket 连接
2. 客端透过 WebSocket 的 send()方法发送消息到服务端
3. 服务端将消息存入数据库后,推送消息到各个客端
4. 客端触发 onmessage 的回调,将推送内容显示
vZexc0m
2017-07-20 13:22:28 +08:00
@timwei 感谢!如果我需要实现两个人的即使通讯,有什么好的思路吗.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/376121

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX