2010-07-27 57 views
0

我想建立一个django服务,许多客户端将发送数据。每个客户端都会代表一个经过身份验证的用户,他们可能会连接到互联网或不连接到互联网,因此客户端会聚合数据并在连接可用时发送它们。数据也应该保存在本地,以便在不碰到服务器的情况下快速访问数据。发送数据到Django站点

数据的性质很简单。它与游戏成就有关,因此每个用户都会获得他们已经取得的成就。因此,没有一致性问题,因为每个用户都将发送自己的成就统计信息,并且没有用户会编辑其他人的数据。

我正在尝试为此找到最合适的介质。我的第一个想法是django服务器将处理的POST HTTP请求。一个python客户端将通过执行这些请求来登录和“发送”数据。任何人都可以提出更好的替代方案,或给出我为什么这个设置适合或不适合的理由

我也想知道你会建议什么格式/方式从客户端获取数据。我在想json或yaml编辑2:这个问题已经在S.Lott的推荐后进行了修改。

回答

2

很多人喜欢这个Piston

我们推出了自己的产品(活塞尚未发布)。是的,您可以在Django中使用JSON有效负载轻松处理RESTful POST请求。然而......一般来说,处理REST是一件痛苦的事情,因为根据方法(GET,POST,PUT或DELETE)调度到视图函数不是Django的一部分。您可以推出自己的基于方法的调度程序,但从长远来看,您会对自己的解决方案感到不满。

活塞不是“额外的开销”。你所描述的不是 - 实际上 - 简单。活塞是这个的适当开销。 “


”客户端将这些调用聚合在本地数据库中,然后将它们与服务器同步。“太复杂了。

如果这些事件以不可思议的巨大速率(每秒100次)发生,那么您将需要一个通过mod_wsgi运行多个Django后端的多进程Apache前端。

但是让客户端与中央数据库同步将会过于复杂。关于客户收集一些数据和崩溃或客户端同步两次的开放性问题太多,因为有人在应用程序不应该运行两次的情况下运行应用程序。 “数据库同步”的问题太多了。躲开它。

+0

活塞看起来不错,但我真的需要这些简单操作的额外开销吗? – FrontierPsycho 2010-07-28 07:40:54

+0

这非常有趣,谢谢。然而,这个应用程序,我想象它,也必须脱机工作,所以聚合是必要的。 另外,由于应用程序的性质,没有两个客户端会希望在同一行上写入,因此可能不存在任何一致性问题。每个用户都有一个帐户,他们的客户端将写入仅与他们有关的数据(用他们自己的user_id)。 我觉得我的英语已经让我失望了一点,但我希望我明确自己。 但是,我一定会考虑活塞。谢谢。 – FrontierPsycho 2010-07-29 07:06:04

+0

@ FrontierPsycho:请用所有这些新事实更新你的问题。你从根本上改变了你所要求的性质。 – 2010-07-29 11:25:35

0

我相信xmlrpc将是一个有效的解决方案。这里是一个例子:http://code.djangoproject.com/wiki/XML-RPC我们在工作中使用它,工作得很好,因为我们的服务器还提供了一些服务。

+0

嗯。我主要需要在服务器和客户端之间传递数据,而不是进行远程过程调用。这看起来有点像使用扳手作为锤子。我可能错了。 – FrontierPsycho 2010-07-28 07:42:13

+0

为什么你想用django呢?你为什么不直接用Python编写你自己的服务器? – gruszczy 2010-07-28 12:13:25

+0

我有一个数据库,也希望有一个网站向全世界公开数据。这将是一种社交网站。 – FrontierPsycho 2010-07-29 06:56:51

0

用角度试试Django Rest框架。

您可以将Django/Django Rest作为后端。

对于前端,您可以使用nodejs或python simplehttp服务器或grunt或gulp运行的angular或react.js。

因此,前端将与django服务器通信以获取数据。为了登录,你可以使用auth-token和角度cookie。

这也将减少后端服务器的负载,因为后端不必提供HTML /模板