基于Websockets的存储后端

时间:2014-01-27 16:36:17

标签: python json sockets websocket backend

我花了很长时间研究服务器后端/ API /框架。我需要一个可以存储用户内容的解决方案(JSON和二进制数据)。 显而易见的选择是REST API。唯一缺少的元素是当服务器上的数据发生变化并且应立即通知客户端时的推送功能。随着对此问题的更多研究,我发现了经典的方法(Comet,Push,服务器发送事件,Bayeux,BOSH ......)以及“新”联盟Websockets。我肯定更喜欢使用Websockets的方法或直接使用TCP套接字。但这篇文章关于这两种技术的优点/缺点,所以请不要在评论中加以跟踪。

目前存在以下与我的需求非常相似的项目:
- Simperium(simperium.com),这看起来非常有前途,但核心/服务器很遗憾不是开源的,上帝知道这一步何时发生
- Realtime.co(framework.realtime.co/storage),托管服务,但原理相同
- 用于构建服务器的一些框架,例如Atmosphere(java,没有WAMP),Cometd(java,项目页面看起来像是停留在90年代),Autobahn(python,WAMP)

我最喜欢的是Autobahn框架(autobahn.ws)。特别是使用WAMP协议(Websocket的子集),因为它提供了我所需要的。因此,我们的想法是使用Autobahn Python(基于Twisted框架)构建一个python后端/服务器,它管理所有套接字(WAMP)连接,并包含一个用于数据存储的Postgresql数据库。对于所有需要的客户端,已存在WAMP库。服务器需要能够执行典型的REST API功能:
- 从/向服务器/客户端发送,更新,删除所请求的数据(JSON /二进制)
- 同步&自动冲突管理
- 连接中断时的离线处理,再次连接时自动重启

最后问题:
- 我是否错过了一个完全满足我需求的开源项目?
- 如果我想用高速公路和数据库开发我自己的服务器,你能指出我正确的方向吗?有很多问题,而且没有足够的深度理解..我知道Autobahn已经给你一个服务器,但这个并不是非常接近我的最终需求..如何建立一个高效的服务器,以便他可以处理所有连接的套接字?当客户端需要服务器推送时如何处理?是否存在这样的服务器应该是什么样的模式,模型或概念?
- Twisted是一个非常强大的python框架,但不被认为是编写应用程序最方便的..但我猜一个基于Socket的存储服务器应该可以访问db?当我作为web资源运行twisted并使用其他python框架开发服务器组件时,这会不会影响延迟/性能?
- 具有大量数据存储(JSON字段以及文档,图像等二进制数据)的理想服务器后端是否合理,可由单个devoloper / small团队使用Sockets构建,或者这是什么样的。只有像Dropbox这样的大公司才能做到这一点?

非常感谢你的帮助和帮助。时间!

1 个答案:

答案 0 :(得分:0)

最后问题:

  • 我是否错过了一个完全涵盖我需求的开源项目? 不,你已经涵盖了开源项目。虽然开源只能让你到达中途。要实现全球实时网络,需要相同的部件实施和相等的部件操作。您必须考虑丢弃的消息,重试,如果特定的地理位置变热,如何扩展服务器等等会发生什么?我认为,除非您愿意将大量资源投入到运营中,否则开源解决方案无法实现您的目标。我建议像PubNub这样的服务:http://pubnub.com

  • 如果我想用高速公路和数据库开发自己的服务器,你能指出我正确的方向吗?有很多问题,而且没有足够的深度理解..我知道Autobahn已经给你一个服务器,但这个并不是非常接近我的最终需求..如何建立一个高效的服务器,以便他可以处理所有连接的套接字?当客户端需要服务器推送时如何处理?是否存在这样的服务器应该是什么样的模式,模型或概念? 支持实时框架的优秀数据库是Cassandra,因为它支持高写入量并能很好地处理时间序列数据:http://cassandra.apache.org/

  • Twisted是一个非常强大的python框架,但不被认为是编写应用程序最方便的..但我猜一个基于Socket的存储服务器应该可以访问db?当我作为web资源运行twisted并使用其他python框架开发服务器组件时,这会不会影响延迟/性能? 我不会使用Twisted。我会使用Gevent:http://www.gevent.org/。它的协程基础,所以你不要进入回调地狱。要支持更多连接,您只需增加greenlet池以便在套接字上侦听。

  • 这样一个理想的服务器后端是否具有大量数据存储(JSON字段以及二进制数据,如文档,图像),单个devoloper / small团队使用套接字构建是合理的,还是这个问题。只有像Dropbox这样的大公司才能做到这一点? 我再也不会自己构建这个。像PubNub这样的服务:http://pubnub.com可以为您解决所有操作问题并拥有一个干净的API,可以最低的成本满足您的需求。 PubNub为您处理协议,因此如果您在不支持WebSockets的移动设备上,它将使用TCP,HTTP或任何最佳传输设备。