V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
iambic
V2EX  ›  问与答

RPC 还是 HTTP? 请教一个 PHP 和 Python 通讯的问题

  •  
  •   iambic · 2015-07-25 19:54:30 +08:00 · 3706 次点击
    这是一个创建于 3409 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景是这样的

    公司内部主要语言是C++/PHP, C++一般包裹成一个个服务的方式,处理后台逻辑,PHP作为中间层,接受web请求,扔给后端的C server,通讯采用的是RPC+内部的二进制的序列化方式

    目前有一些算法模块涉及到一些机器学习/数据挖掘的算法,方便起见,主要使用python开发的(主要是一些计算依赖于numpy/scipy/sklearn,完全重新自己写不太现实),部分计算密集的逻辑用C完成,封装成了so来供python调用。

    现在期望将这部分计算逻辑包装成一个服务(server), 来供前台的PHP调用,我个人对网络通讯相关了解不太多,我了解的这种调用只有rpc/http

    现在问题是
    1. 使用RPC还是HTTP更合适?如果使用HTTP的话,是不是最好以REST这种方式对外提供接口?
    2. 如果使用RPC的话,python自带一个xmlrpclib,但是xml这种格式比较冗长,pip里边还有jsonrpc,请问更推荐哪种?
    3. 如果使用HTTP的话,python自带一个simpleHTTPserver, 但是看名字是不是一般仅作为测试使用,不应该放到实际的生产环境里(比如生产环境里可能会涉及基本的并发,吞吐的要求),
    4. HTTP的话,我之前简单了解过Flask,用Flask来对外提供REST接口靠谱吗?比如它的内部是异步的吗?一个请求阻塞住会影响其他请求吗?
    5. 还有没其他推荐的方式,最好是一些业界成熟的做法,谢谢!

    13 条回复    2015-07-27 16:23:59 +08:00
    falcon05
        1
    falcon05  
       2015-07-25 19:59:59 +08:00 via iPhone
    gearman?
    chengzhoukun
        2
    chengzhoukun  
       2015-07-25 20:02:00 +08:00   ❤️ 1
    tornado是不是更好一些
    kslr
        3
    kslr  
       2015-07-25 21:36:17 +08:00
    对前端RESTful API最适合了,python中的web框架tornado异步是最好的,不过不太容易玩转。
    wshcdr
        4
    wshcdr  
       2015-07-25 21:39:49 +08:00
    RPC是比较过时的概念,目前都是走HTTP + JSON
    ferock
        5
    ferock  
       2015-07-25 21:41:02 +08:00 via Android
    thrift
    matsuijurina
        6
    matsuijurina  
       2015-07-25 22:01:30 +08:00
    之前做了一个类似的实现,用Flask搞异步非阻塞得配合Gevent,但搞完觉得还是不如Tornado加Gevent强。
    sjtlqy
        7
    sjtlqy  
       2015-07-25 22:04:20 +08:00
    计算密集性,计算比较多,随便吧。这个不是非常重要,个人觉得。
    能http就简单点。
    sjtlqy
        8
    sjtlqy  
       2015-07-25 22:05:27 +08:00
    各位都没有想到这种请求计算,有时间需要时间很长的。
    9hills
        9
    9hills  
       2015-07-25 22:39:37 +08:00
    rpc用thrift rpc,protobuf之类
    http的话,flask或者tornado都可以
    skydiver
        10
    skydiver  
       2015-07-25 22:51:34 +08:00
    @wshcdr rpc怎么就过时了,thrift和grpc都是一直在更新的。
    zeayes
        11
    zeayes  
       2015-07-26 21:30:09 +08:00
    @matsuijurina 压力测试的结果能贴一下吗?
    zeayes
        12
    zeayes  
       2015-07-26 21:36:21 +08:00
    1、rpc或者http都可以,考虑到公司一直都是用rpc,可以考虑用rpc。
    2、rpc个人更推荐thrift。
    3、SimpleHTTPServer这个只是一个非常简单的server。
    4、靠谱,flask是单线程的,请求会阻塞。非阻塞的可以考虑tornado,或者flask + guincorn(gevent模式)。
    5、个人推荐rpc。
    invite
        13
    invite  
       2015-07-27 16:23:59 +08:00
    这类 RPC ? 底层不是HTTP ?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   993 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 20:05 · PVG 04:05 · LAX 12:05 · JFK 15:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.