V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
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
vZexc0m
V2EX  ›  Python

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

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

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

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

    从大厅进入房间后,渲染 WebSocket 的客端 JS 代码,带用户 Token 联接 WebSocket 服务
    sanmmmm
        6
    sanmmmm  
       2017-07-18 12:14:22 +08:00
    个人项目用过  flask + socketio,感觉还行.
    lolizeppelin
        7
    lolizeppelin  
       2017-07-18 12:49:47 +08:00 via Android
    抄 openstack 的 vnc 服务
    awanabe
        8
    awanabe  
       2017-07-18 12:59:54 +08:00
    @sanmmmm flask + socketio 是怎么部署的,uwsgi 对 socketio 不友好。。好像只能用 gevent
    arischow
        9
    arischow  
       2017-07-18 13:03:03 +08:00
    Flask-SocketIO 不错
    NaVient
        10
    NaVient  
       2017-07-18 16:30:51 +08:00
    弹幕系统类似全站广播 用 rabbitmq stomp+ sockjs 做很容易的
    fy
        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。
    maxxxxx
        12
    maxxxxx  
       2017-07-18 16:40:52 +08:00
    就用 gevent-websocket 起了服务之后在 rerequest 里面取 wsgi.websocket 就好啦
    sanmmmm
        13
    sanmmmm  
       2017-07-18 18:09:49 +08:00
    @awanabe 挺早之前写的,忘了是用的哪个容器了.f lask 插件就哪个f lask-socketio
    caniuse
        14
    caniuse  
       2017-07-18 21:27:37 +08:00
    多少用户同时在线??
    vZexc0m
        15
    vZexc0m  
    OP
       2017-07-19 15:31:06 +08:00
    @maxxxxx 这个怎么取得用户信息和监控 websocket 的连接与关闭
    vZexc0m
        16
    vZexc0m  
    OP
       2017-07-19 21:29:36 +08:00 via Android
    @timwei 我想知道是怎么做的数据共享,还有 socket 怎么带 token。
    timwei
        17
    timwei  
       2017-07-20 09:28:41 +08:00
    1. 两个服务共用一个数据库
    2. send()的时候带上 token 即可
    vZexc0m
        18
    vZexc0m  
    OP
       2017-07-20 09:37:02 +08:00
    @timwei 感谢回复。我想的是用户通过一个短连接发送消息存入数据库,然后这个长连接能够实时获取用户发送的消息,然后发送给客户端。请问有什么好的实现方式吗
    timwei
        19
    timwei  
       2017-07-20 12:26:19 +08:00
    @vZexc0m
    "送消息存入数据库"、"服务推送到各客户端" 都是通过 WebSocket 的连接

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

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

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