向Django网站发送数据
我正在尝试建立一个django服务,很多客户端会向它发送数据。每个客户端代表一个经过认证的用户,这些用户可能在线也可能不在线,所以客户端会先把数据收集起来,等有网络连接时再发送。数据还需要在本地保存,这样可以快速访问,而不需要每次都去服务器。
这些数据很简单,主要和游戏成就有关,每个用户会有自己获得的成就集合。因此,不会出现数据一致性的问题,因为每个用户只会发送自己的成就数据,其他用户无法编辑别人的数据。
我在寻找最合适的方式来实现这个功能。我最初的想法是使用POST HTTP请求,由django服务器来处理。一个python客户端会登录并通过这些请求“发送”数据。有没有人能建议更好的替代方案,或者告诉我这个设置是否合适?
我还想知道你们建议用什么格式或方式来获取客户端的数据。我在考虑使用json或yaml。
编辑2:在S.Lott的建议后,这个问题进行了重新整理。
3 个回答
试试用Django Rest Framework配合Angular。
你可以把Django或者Django Rest当作后端。
前端可以用Angular或者React.js,再加上Node.js、Python的简单HTTP服务器,或者用Grunt或Gulp来运行。
这样,前端就可以和Django服务器沟通,获取数据。登录的时候,可以使用认证令牌和Angular的Cookies。
这样做还可以减轻后端服务器的负担,因为后端不需要提供HTML或模板。
我觉得 xmlrpc
是一个不错的解决方案。这里有个例子:http://code.djangoproject.com/wiki/XML-RPC。我们在工作中也用过这个,效果很好,因为我们的服务器还提供了一些服务。
很多人喜欢用 Piston 来处理这个问题。
我们自己做了一个(那时候Piston还没发布)。没错,你可以很简单地在Django中处理一个带有JSON数据的RESTful POST请求。但是... 一般来说,处理REST会让人很头疼,因为Django并没有内置根据请求方法(GET、POST、PUT或DELETE)来分发到不同视图函数的功能。你可以自己写一个方法来处理这些请求,但从长远来看,你会发现自己写的解决方案并不理想。
Piston并不是“额外的负担”。你说的其实并不简单。Piston提供的负担是刚刚好的。
“一个客户端将这些调用聚合到本地数据库,然后再与服务器同步。” 这太复杂了。
如果这些事件发生的速度快得惊人(每秒上百个),那么你需要一个多进程的Apache前端,运行多个Django后端,通过mod_wsgi来处理。
但是让客户端与中央数据库同步会太复杂。关于客户端收集一些数据后崩溃,或者因为有人不小心重复运行应用程序而导致客户端重复同步的数据,都会有太多未解决的问题。关于“数据库同步”的问题太多了。尽量避免这样做。