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

2011-06-14 00:05:24 +08:00
 reorx
有这样一个Android应用,它(被期望)具有以下特性:
1. 基本完全使用socket与服务器通信。
2. 用户验证机制。
3. 服务器可以主动向客户端推送更新数据(非HTTP式的单向连接)。

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

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

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

我之前也是一直受限于网站开发的思维,其实networking 和 web是不一样的。
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
2011-06-14 12:34:50 +08:00
@cmonday 嗯,同唤张教主~
9hills
2011-06-14 12:38:55 +08:00
所以希望有比较好的Socket Server框架。实现控制各节点的功能。

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

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

唔,API
先去吃饭,一会回来……
cmonday
2011-06-14 12:51:04 +08:00
@reorx 张教主在写一个开源项目zpage: https://groups.google.com/forum/#!forum/kanrss_pyer
我不懂python,不过我现在在帮这个项目写android客户端(目前还在准备阶段,不过我已经开始写代码了),一开始打算先用http请求和客户端定时请求数据的模式,下一步应该会尝试实现你说的socket通信和服务器端推送的模式
你可以跟他聊聊~
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
2011-06-14 13:22:43 +08:00
正在准备一个类似的项目,不过使用的是Web端API的方式。之前还没有考虑过使用其他方式,感谢@reorx 给了很好的启发。关注该问题的最终解决方案。
reorx
2011-06-14 14:03:34 +08:00
@cmonday 张教主是一个很值得敬佩的人,我也很想认识他~

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

不知道zpage为何停滞了,如果有机会,我也会加入到这个开源项目中的 :)
reorx
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
2011-06-14 14:38:17 +08:00
9hills
2011-06-14 15:51:40 +08:00
@reorx 恩。我也这么觉得。有个中间层比较好。

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

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

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

下一个目标就是twisted了,真真感受到,即便只是一个web开发者,也不能只懂HTTP不懂TCP/IP呀。
Livid
2011-06-15 00:45:23 +08:00
@reorx 移动完毕。
lijia18
2011-11-21 18:06:48 +08:00
完全socket,太nb了,为啥要完全socket呢?
reorx
2011-11-21 21:43:51 +08:00
@lijia18 因为这个应用必须与服务器保持实时连接,以便能接收服务器主动推送的信息。当然也不是说完全不用HTTP,是根据协议的特性去应用在不同的场景。Socket用于做心跳连接,和通知类(单次少量响应率高的)数据的传输;HTTP用于访问无须反馈的接口,获取相对较多的数据。
clc3123
2011-11-21 22:18:27 +08:00
https://github.com/igrigorik/em-websocket
找了个ruby的。
配合eventmachine,em效率还是挺强的,开发又简单,就是事件机制有点绕不过弯来一开始。做过http的,websocket没接触过,应该也差不多吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/14415

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX