首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
V2EX  ›  Python

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

  •  
  •   vZexc0m · 2017-07-18 11:29:14 +08:00 · 6899 次点击
    这是一个创建于 817 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在想用 gevent-websocket 或者 tornado 做,请问有相关的例子或教程吗?或者提供一下后端设计思路。
    26 回复  |  直到 2019-07-24 00:11:39 +08:00
        1
    pyengwoei   2017-07-18 11:35:46 +08:00
    我有个项目,用 Python 抓过 websocket 的数据
        2
    zhengxiaowai   2017-07-18 11:52:13 +08:00
    tornado 自带 websocket 特别简单,以前用 websocket 做过一个实时日志
        3
    wwqgtxx   2017-07-18 11:52:25 +08:00 via iPhone
    直接用 socket.io 会简单很多
        4
    mytsing520   2017-07-18 12:03:03 +08:00   ♥ 1
    http://tu.dog
        5
    timwei   2017-07-18 12:03:23 +08:00   ♥ 1
    简单聊天系统的架构: 起一个 Web 服务、一个 WebSocket 服务、一个 database

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

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

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

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

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

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

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

    流程整体会是
    1. 建立 WebSocket 连接
    2. 客端透过 WebSocket 的 send()方法发送消息到服务端
    3. 服务端将消息存入数据库后,推送消息到各个客端
    4. 客端触发 onmessage 的回调,将推送内容显示
        20
    vZexc0m   2017-07-20 13:22:28 +08:00
    @timwei 感谢!如果我需要实现两个人的即使通讯,有什么好的思路吗.
        21
    bestkayle   2017-07-20 15:23:46 +08:00
    django + channels
        22
    willhunger   2017-07-25 21:58:46 +08:00
    楼主开始动手了吗?打算开源吗?想一起参与
        23
    vZexc0m   2017-07-27 11:22:53 +08:00
    @willhunger 正在写 用的 tornado.websocket,开源的话 感觉代码太烂,拿不出手
        24
    davidshao   2017-07-27 14:44:02 +08:00
    @mytsing520。。。过分》。。我微博被强制销户了...土狗怎么登录=。=
        25
    willhunger   2017-07-27 15:17:56 +08:00
    @vZexc0m #23 好吧,那楼主加油哦
        26
    chitanda   82 天前 via Android
    线上服务,流量大的话还是慎用吧,七牛欢迎你
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   828 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 26ms · UTC 21:14 · PVG 05:14 · LAX 14:14 · JFK 17:14
    ♥ Do have faith in what you're doing.