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 · 11818 次点击
    这是一个创建于 4913 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有这样一个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
    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
       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   ·   实用小工具   ·   5719 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 01:47 · PVG 09:47 · LAX 17:47 · JFK 20:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.