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

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

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

所以最后的问题:
- 我是否错过了一个完全满足我需求的开源项目?
- 如果我想用高速公路和数据库开发我自己的服务器,你能指出我正确的方向吗?有很多顾虑,理解不够深入.. 我知道 Autobahn 已经为您提供了一个服务器,但是这个服务器不是很接近我的最终需求.. 如何构建一个高效的服务器,以便他可以处理所有连接的套接字?当客户端需要服务器推送时如何处理?是否有这样的服务器应该是什么样的模式、模型或概念?
- Twisted 是一个非常强大的python 框架,但不被认为是编写应用程序最方便的框架。但我想一个具有数据库访问权限的基于Socket 的存储服务器应该是可能的?当我作为 Web 资源运行扭曲并使用其他 python 框架开发服务器组件时,这会大大降低延迟/性能吗?
- 这样一个具有大量数据存储(JSON 字段以及二进制数据,如文档、图像)的理想服务器后端是否可以由单个开发人员/小团队使用 Sockets 构建,或者是这样。目前只有像 Dropbox 这样的大公司可以做哪些事情?

非常感谢您的帮助和时间!

最佳答案

所以最后的问题:

  • 我是否错过了一个完全满足我需求的开源项目?
    不,您已经介绍了开源项目。不过,开源只能让你完成一半。实现全局实时网络需要等量的实现和等量的操作。您必须考虑丢弃的消息,重试,如果特定地理区域变热会发生什么,您如何扩展服务器......等等。我会争辩说,除非您愿意将大量资源投入运营,否则开源解决方案不会实现您想要的。我会推荐像 PubNub 这样的服务:http://pubnub.com
  • 如果我想用高速公路和数据库开发我自己的服务器,你能指出我正确的方向吗?有很多顾虑,理解不够深入.. 我知道 Autobahn 已经为您提供了一个服务器,但是这个服务器不是很接近我的最终需求.. 如何构建一个高效的服务器,以便他可以处理所有连接的套接字?当客户端需要服务器推送时如何处理?是否有这样的服务器应该是什么样的模式、模型或概念?
    支持实时框架的好数据库是 Cassandra,因为它支持高写入量并能很好地处理时间序列数据: http://cassandra.apache.org/
  • Twisted 是一个非常强大的python 框架,但不被认为是编写应用程序最方便的框架。但我想一个具有数据库访问权限的基于Socket 的存储服务器应该是可能的?当我作为 Web 资源运行扭曲并使用其他 python 框架开发服务器组件时,这会大大降低延迟/性能吗?
    我不会使用 Twisted。我会使用 Gevent: http://www.gevent.org/ 。它基于协程,因此您不会陷入回调 hell 。为了支持更多的连接,你只需增加你的 greenlet 池来监听套接字。
  • 是这样一个具有大量数据存储(JSON 字段以及二进制数据,如文档、图像)的理想服务器后端,可以由单个开发人员/小团队使用 Sockets 进行构建,或者是这样。目前只有像 Dropbox 这样的大公司可以做哪些事情?
    同样,我不会自己构建它。像 PubNub: http://pubnub.com 这样的服务会为您处理所有操作问题,并拥有干净的 API,可以以最低的成本满足您的需求。 PubNub 会为您处理协议(protocol),因此如果您在不支持 WebSockets 的移动设备上,它将使用 TCP、HTTP 或任何适合该设备的最佳传输方式。
  • 关于python - 基于 Websockets 的存储后端,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21386318/

    10-11 22:34
    查看更多