请教各位,如何开发一个Android应用的网络后端? - V2EX
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
reorx
V2EX    Python

请教各位,如何开发一个Android应用的网络后端?

  •  
  •   reorx
    reorx 2011-06-14 00:05:24 +08:00 12182 次点击
    这是一个创建于 5300 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有这样一个Android应用,它(被期望)具有以下特性:
    1. 基本完全使用socket与服务器通信。
    2. 用户验证机制。
    3. 服务器可以主动向客户端推送更新数据(非HTTP式的单向连接)。

    它的网络后端,似乎是socket服务器结合数据存储框架,该用什么开发,如何去开发呢?

    期望得到的建议:
    1. 对这样一个后端架构模型的简单描述。
    2. 可使用的python网络框架。
    3. 可参考的开源项目(不限语言)。

    谢谢各位 :)
    27 条回复    1970-01-01 08:00:00 +08:00
    reorx
        1
    reorx  
    OP
       2011-06-14 12:03:16 +08:00
    呼唤@livid,可否将这个帖子移至python节点呢?
    xhinking
        2
    xhinking  
       2011-06-14 12:12:23 +08:00
    @reorx 指的是如何建立网站的API接口么?
    cmonday
        3
    cmonday  
       2011-06-14 12:22:55 +08:00
    呼叫@zuroc
    td width="10" valign="top">
    reorx
        4
    reorx  
    OP
       2011-06-14 12:31:41 +08:00
    @xhinking 应该说是这个**网络**服务的API,而不是**网站**,因为网站是被通过HTTP来访问数据,而网络服务是用socket。

    我之前也是一直受限于网站开发的思维,其实networking 和 web是不一样的。
    9hills
        5
    9hills  
       2011-06-14 12:32:01 +08:00
    mark. 最近也在弄类似的东西。
    但不限于Andriod。

    整个项目的架构大概是这样
    1. 分布式的传感器---> 传感器主节点 ---> Socket Server ---> MySQL数据库
    2. MySQL数据库 ----> HTTP Server ----> Browser
    |
    ----> Android

    目前和Andriod通讯用的json,Socket Server和HTTP Server都用的python。但是这个流程是单向的

    我的目标是实现在web界面和android上控制各传感器节点。。
    reorx
        6
    reorx  
    OP
       2011-06-14 12:34:50 +08:00
    @cmonday 嗯,同唤张教主~
    9hills
        7
    9hills  
       2011-06-14 12:38:55 +08:00
    所以希望有比较好的Socket Server框架。实现控制各节点的功能。

    主节点和Server通讯不采用HTTP的原因,主要是流量问题,因为用的是GPRS网络,就这每天还有2~3M左右的流量。
    reorx
        8
    reorx  
    OP
       2011-06-14 12:47:55 +08:00
    @9hills 你是如何解决存储数据对象化模块被Socket Server和HTTP Server所共用的问题呢?

    +--------------+ +----------+
    |socket request|<--->|web server|<----->+---+
    +--------------+ +----------+ | |
    +------------+ +-------------+ |API|
    |http request|<----->|socket server|<-->+---+
    +------------+ +-------------+

    唔,API
    先去吃饭,一会回来……
    cmonday
        9
    cmonday  
       2011-06-14 12:51:04 +08:00
    @reorx 张教主在写一个开源项目zpage: https://groups.google.com/forum/#!forum/kanrss_pyer
    我不懂python,不过我现在在帮这个项目写android客户端(目前还在准备阶段,不过我已经开始写代码了),一开始打算先用http请求和客户端定时请求数据的模式,下一步应该会尝试实现你说的socket通信和服务器端推送的模式
    你可以跟他聊聊~
    9hills
        10
    9hills  
       2011-06-14 12:56:20 +08:00
    @reorx 目前Socket Server只管insert.. Http Server 只管select,暂时不会冲突

    Socket Server现在暂时用的python的SockerServer Framework,还是比较原始的,数据库操作也是基本靠SQL。。虽然小封装了一下

    Web Server采用的是Django,提供json格式的api供客户端的js以及android调用。Django的models 是我用 manage.py inspectdb 生成的。
    xhinking
        11
    xhinking  
       2011-06-14 13:22:43 +08:00
    正在准备一个类似的项目,不过使用的是Web端API的方式。之前还没有考虑过使用其他方式,感谢@reorx 给了很好的启发。关注该问题的最终解决方案。
    reorx
        12
    reorx  
    OP
       2011-06-14 14:03:34 +08:00
    @cmonday 张教主是一个很值得敬佩的人,我也很想认识他~

    我简略看了一下zpage的开发计划,感觉这个项目底子里还是在做web,如果说要用到socket的部分,大约会是他的通知系统,不过这一部分完全可以单独做,比如用一个消息池额外存储用户的事件动态,socket服务器不断检测是否更新。与以手机客户端为中心的服务还是有所区别的。

    不知道zpage为何停滞了,如果有机会,我也会加入到这个开源项目中的 :)
    reorx
        13
    reorx  
    OP
       2011-06-14 14:37:16 +08:00
    @9hills 嗯,整理一下我的想法:

    http://www.cl.ly/2Q1I0E0Y3Z2i0C1m3D0T

    我的设想是,无论Web(HTTP) Server 还是 Socket Server,都只作为接收用户请求的服务器前端,由一个统一的“C”来处理所有与数据有关的部分,这个“C”借用MVC开发模式中Controller的概念,相当于独立于请求之外的总数据控制器。其中的“V”(Views)借指request与response的处理器,通过ORM和Memcached获取数据,并和Message Pool里的事件交互。

    才疏学浅,许多概念都是凭臆想妄加引用的,还请指正。
    reorx
        14
    reorx  
    OP
       2011-06-14 14:38:17 +08:00
    9hills
        15
    9hills  
       2011-06-14 15:51:40 +08:00
    @reorx 恩。我也这么觉得。有个中间层比较好。

    不过没有弄过这个方面的东西(其实那些传感器才是我的主业。。),所以也不知道怎么弄

    总的来说,这个中间层应该是基于事件驱动的,具体怎么弄。。。貌似JAVA方面的比较多。

    我搜到一个Python的, twisted,正在看
    reorx
        16
    reorx  
    OP
       2011-06-14 16:07:40 +08:00
    @9hills twisted略有了解,它应该就是基于事件驱动的网络编程框架,所以我想它可能适合去做“中间层”。

    下一个目标就是twisted了,真真感受到,即便只是一个web开发者,也不能只懂HTTP不懂TCP/IP呀。
    Livid
        17
    Livid  
    MOD
    PRO
       2011-06-15 00:45:23 +08:00
    @reorx 移动完毕。
    lijia18
        18
    lijia18  
       2011-11-21 18:06:48 +08:00
    完全socket,太nb了,为啥要完全socket呢?
    reorx
        19
    reorx  
    OP
       2011-11-21 21:43:51 +08:00
    @lijia18 因为这个应用必须与服务器保持实时连接,以便能接收服务器主动推送的信息。当然也不是说完全不用HTTP,是根据协议的特性去应用在不同的场景。Socket用于做心跳连接,和通知类(单次少量响应率高的)数据的传输;HTTP用于访问无须反馈的接口,获取相对较多的数据。
    clc3123
        20
    clc3123  
       2011-11-21 22:18:27 +08:00
    https://github.com/igrigorik/em-websocket
    找了个ruby的。
    配合eventmachine,em效率还是挺强的,开发又简单,就是事件机制有点绕不过弯来一开始。做过http的,websocket没接触过,应该也差不多吧。
    clino
        21
    clino  
       2011-11-22 10:42:39 +08:00
    感觉"服务器可以主动向客户端推送更新数据(非HTTP式的单向连接)"这个比较难做到.而且这样的话android这边耗电量会比较...
    reorx
        22
    reorx  
    OP
       2011-11-22 12:54:46 +08:00
    @clc3123 嗯,websocket相当于满足了web上的实时性需求,不过不能用于android啊,还是要通过socket解决。
    ywjno
        23
    ywjno  
       2011-11-22 12:59:45 +08:00
    写一个rest风格的api出来,服务器根据该url请求返回一json文件,客户端接收该json文件并解析出来,这应该是最简单了的吧
    reorx
        24
    reorx  
    OP
       2011-11-22 13:01:45 +08:00
    @clino 比较...大。所以后来用了另一个机制,通过在特定的情况下开启HTTP轮询来模拟socket的双向连接。不得不说,HTTP还是最为方便好用啊,尤其对后端而言,只需要扔回Response,什么线程控制、事件驱动,通通不用管啦~
    reorx
        25
    reorx  
    OP
       2011-11-22 13:03:07 +08:00
    @ywjno 嗯,大部分HTTP的接口是这样做的,RESTful + json,一直都不会XML ;)
    clc3123
        26
    clc3123  
       2011-11-22 13:19:13 +08:00
    @reorx http还是最通用,时间和团队经不起折腾的话,用http最经济啊,管他性能呢
    xingzhi
        27
    xingzhi  
       2011-12-13 01:43:19 +08:00
    @reorx Http应该是比较好用的。
    我觉得您的问题重点在于 “服务器的推送”
    对服务器推技术不太了解。

    但我想起了一个场景:

    Android上,Gmail是如何第一时间提示收到邮件的?
    究竟是http轮询还是用socket?

    我觉得这点可以借鉴一下。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     936 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 19:30 PVG 03:30 LAX 11:30 JFK 14:30
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86