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
fy
V2EX  ›  Python

话说 socket.io 为何这么叼? python 有类似玩意吗?

  •  
  •   fy ·
    fy0 · 2015-02-08 01:13:32 +08:00 · 18694 次点击
    这是一个创建于 3583 天前的主题,其中的信息可能已经有所发展或是发生改变。
    LZ主要使用python,会一点nodejs。

    然后就遇到这个socket.io,感觉实在太叼了,完爆楼主以前见过的tornado的chatroom.

    楼主于是找了一堆库,大部分是django的,更新日期基本都在大半年前,测试了一下没有一个能跑的(也许是楼主低端,有漏网的)。

    于是就想问问这边有没有类似的替代品?即使有coffee,还是不想碰nodejs啊!
    24 条回复    2015-02-26 13:03:33 +08:00
    noli
        1
    noli  
       2015-02-08 02:25:59 +08:00
    gevent?
    dcoder
        2
    dcoder  
       2015-02-08 02:28:19 +08:00
    做 web python 是不如 node
    mkeith
        3
    mkeith  
       2015-02-08 02:55:20 +08:00
    楼主你要做什么东西啊?
    就是websocket,commet,长连接几个
    yanke
        4
    yanke  
       2015-02-08 03:00:04 +08:00
    faye ?
    yangzh
        5
    yangzh  
       2015-02-08 07:09:55 +08:00 via iPhone
    O14
        6
    O14  
       2015-02-08 09:32:16 +08:00 via Android
    @dcoder 赫赫
    esyed
        7
    esyed  
       2015-02-08 09:35:55 +08:00
    楼主用ruby吧:)
    aec4d
        8
    aec4d  
       2015-02-08 11:19:52 +08:00
    Flask-SocketIO 仅兼容socket.io 0.9.X
    autobahn
    icylogic
        9
    icylogic  
       2015-02-08 11:41:37 +08:00 via Android
    你觉得吊在哪里啊。。。 tornado + websocket 不就行了
    fy
        10
    fy  
    OP
       2015-02-08 12:31:51 +08:00
    @yangzh gevent 说实话没怎么了解过,方式跟tornado的异步差不多么?

    @mkeith 嗯,打算试试 websocket

    @aec4d python web 的这些家伙好像都是基于gevent-socketio的,可是gevent-socketio都好久没更新了,是不是大家都去玩golang或者nodejs这些了?

    @icylogic 全平台兼容,不支持websocket能自动切换长连接或者flash等方式,API又自然毫无PS痕迹,这还不能称吊?可用性和成熟度上完爆tornado的类似方案啊。另外tornado不打算再用,优先实践一些新东西
    yangzh
        11
    yangzh  
       2015-02-08 14:08:09 +08:00
    @fy gevent 原理应该说和多进程差不多吧。反正不是 tornado 和 node 那种异步回调的方式。

    反正不是公司要求的话用新东西也蛮好的。
    aec4d
        12
    aec4d  
       2015-02-08 14:36:50 +08:00
    @fy 对的,而且Flask-ScoketIO 不支持python3,看看autobahn吧 挺有意思的
    Smartype
        13
    Smartype  
       2015-02-08 15:00:51 +08:00
    @yangzh from gevent.monkey import patch_all; patch_all(),使用coroutine的方式。也是异步回调的无痛实现。要异步的方式写异步的话,可以试试twisted
    fy
        14
    fy  
    OP
       2015-02-08 19:57:01 +08:00
    楼主回来了……搞了好久这玩意,蛋都碎了。
    然而又弄了一圈,还是发现没有任何一个可用的库。
    于是楼主找socketio的类似实现,看到有个叫SockJs的

    最后楼主看到这个库:django-websocket-request
    看了看名字,django,并且是使用SockJS的库

    结果TMD弄下来demo一看,发现是加载了django的配置文件,其实是跑在tornado上头的!!!!
    这差不多就是个sockjs.tornado的demo啊!!

    最后楼主呵呵一笑,机智的强行在tornado上架了一个django wsgi,终于用上了这个功能。
    gamexg
        15
    gamexg  
       2015-02-08 22:59:04 +08:00
    也在比较推送方案

    看到python 与 socket.io 之间通信有

    https://github.com/ziyasal/socket.io-python-emitter
    使用官方的接口,但是需要 redis ,不想为了通信而在运行一个 redis 了。

    https://github.com/invisibleroads/socketIO-client
    socket.io python客户端库 更新日期也不晚,看接口比较适合我这种轻度使用的情况。

    https://github.com/evanw/socket.io-python
    socket.io 的服务器库,是通过启动一个nodejs socket.io 然后与 python tcp 通信实现的,最后更新日期4年前...

    https://github.com/abourget/gevent-socketio
    python gevent 实现的 socket.io 客户端,最后更新日期2014年2月,很想用这个,但是怕碰到兼容问题。

    https://github.com/nkzawa/socket.io-client.java
    socket.io java 客户端库,android 上面用正好。
    jamiesun
        16
    jamiesun  
       2015-02-09 00:58:53 +08:00
    fy
        17
    fy  
    OP
       2015-02-09 21:55:50 +08:00   ❤️ 1
    @gamexg 据我当时观察,这些库基本都是依赖gevent-socketio的。但是gevent-socketio半死不活。而且很多库都有诡异的兼容性问题,依赖的数个库都只能用一个特定版本,甚至这种情况下还会出问题,兼容性太差了。
    其实后来看了文档,可以直接上gevent也行的,但只能是要么长连接要么websocket,对比整合到一块的socketio或者SockJs差的太远了,就放弃了。
    fy
        18
    fy  
    OP
       2015-02-09 21:56:58 +08:00
    大概Web时代,半年不更新的库都不是很可靠了……
    像是django这种更加丧心病狂的,更新一个版本号,变化大成狗了……
    ltttx
        19
    ltttx  
       2015-02-10 09:09:50 +08:00
    尝试过 flask-socketio,也是基于gevent-socketio。结论是不可用,结果还是用socket.io实现了服务端。
    gamexg
        20
    gamexg  
       2015-02-10 10:50:47 +08:00
    @fy 除了 gevent-socketio 其他的库和 gevent-socketio 没有关系的。

    其他的大部分都是原版 socket.io 服务端,各种方式与服务器通信。
    mathgl
        21
    mathgl  
       2015-02-20 22:42:39 +08:00 via Android
    @jamiesun 性能如何?
    jamiesun
        22
    jamiesun  
       2015-02-23 21:06:32 +08:00
    @mathgl twisted性能是没话说的,在linux下可以用pypy加速,比gevent还吊
    mathgl
        23
    mathgl  
       2015-02-23 23:12:47 +08:00
    @jamiesun pypy在win32也可以加速twisted, 原来只能用select reactor. iocp reactor因为当时是cython写的,pypy没法支持。现在就不懂了。
    jamiesun
        24
    jamiesun  
       2015-02-26 13:03:33 +08:00
    @mathgl 原来是这样,难怪我一测试就崩溃
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2548 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 01:29 · PVG 09:29 · LAX 17:29 · JFK 20:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.