基于 Websockets 的存储后端

     2023-02-19     152

关键词:

【中文标题】基于 Websockets 的存储后端【英文标题】:Storage Backend based on Websockets 【发布时间】:2014-02-18 14:43:50 【问题描述】:

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

目前存在以下与我的需求非常相似的项目: - 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 访问权限?当我将 twisted 作为 Web 资源运行并使用其他 python 框架开发服务器组件时,这会大大降低延迟/性能吗? - 这样一个具有大量数据存储(JSON 字段以及二进制数据,如文档、图像)的理想服务器后端是否可以由单个开发人员/小团队使用 Sockets 构建,或者是这样的。目前只有 Dropbox 这样的大公司才能做到?

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

【问题讨论】:

【参考方案1】:

所以最后的问题:

我是否错过了一个完全满足我需求的开源项目? 不,您已经介绍了开源项目。不过,开源只能让你走到一半。实施全球实时网络需要等量实施和等量操作。您必须考虑丢失的消息、重试、如果特定地理位置变热会发生什么情况如何扩展您的服务器......等等。我会争辩说,除非您愿意将大量资源投入到运营中,否则开源解决方案将无法实现您想要的。我会推荐像 PubNub 这样的服务:http://pubnub.com

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

Twisted 是一个非常强大的 Python 框架,但并不是最方便编写应用程序的框架。但是我想应该可以使用基于 Socket 的存储服务器并具有 db 访问权限?当我将 twisted 作为 Web 资源运行并使用其他 python 框架开发服务器组件时,这会大大降低延迟/性能吗? 我不会使用 Twisted。我会使用 Gevent:http://www.gevent.org/。它基于协程,因此您不会陷入回调地狱。要支持更多连接,您只需增加 greenlet 池以侦听套接字。

这样一个具有大量数据存储(JSON 字段以及二进制数据,如文档、图像)的理想服务器后端是否可以由单个开发人员/小型团队使用 Sockets 构建,或者就是这样。目前只有像 Dropbox 这样的大公司才能做到这一点? 再一次,我不会自己构建这个。像 PubNub:http://pubnub.com 这样的服务可以为您处理所有的操作问题,并且有一个干净的 API 将以最低的成本满足您的需求。 PubNub 会为您处理协议,因此如果您在不支持 WebSockets 的移动设备上使用 TCP、HTTP 或任何适合该设备的最佳传输方式。

【讨论】:

Websockets - 自定义排队系统有意义吗?

】Websockets-自定义排队系统有意义吗?【英文标题】:Websockets-doesacustomqueueingsystemmakesense?【发布时间】:2017-02-1715:00:21【问题描述】:我正在为基于回合的Unity游戏编写node.jswebsocket后端。这是我第一次使用node.js和websockets,所以... 查看详情

为啥 System.Net.WebSockets 不是基于事件的? [关闭]

】为啥System.Net.WebSockets不是基于事件的?[关闭]【英文标题】:WhyareSystem.Net.WebSocketsnoteventbased?[closed]为什么System.Net.WebSockets不是基于事件的?[关闭]【发布时间】:2020-10-2317:20:19【问题描述】:我想问一下System.Net.WebSockets不是基... 查看详情

基于 SPDY 的 WebSockets

】基于SPDY的WebSockets【英文标题】:WebSocketsoverSPDY【发布时间】:2014-10-1217:56:28【问题描述】:我正在学习实时数据Web应用程序,并且我已经使用Node.js和WebSockets构建了一些小型聊天应用程序。我能够为HTTPS流量(静态页面)实现... 查看详情

使用基于vaadin的用户界面在基于springdatajpa的后端

本指南将引导您完成构建使用基于Vaadin的用户界面在基于SpringDataJPA的后端。您将构建什么您将为一个简单的JPA存储库构建一个VaadinUI。您将获得一个具有完整CRUD(创建、读取、更新和删除)功能的应用程序,以及一个使用自定... 查看详情

架构:Websockets 基于来自数据库的触发器发送消息

】架构:Websockets基于来自数据库的触发器发送消息【英文标题】:Architecture:Websocketssendsmessagebasedontriggersfromdatabase【发布时间】:2021-04-2816:53:30【问题描述】:我只是为了练习而实现WebSockets,但遇到了架构问题。拥有WebSockets很... 查看详情

QML 中基于 WebSockets 的 Qt WebView 和 WebChannel

】QML中基于WebSockets的QtWebView和WebChannel【英文标题】:QtWebViewandWebChanneloverWebSocketsinQML【发布时间】:2018-07-1219:26:54【问题描述】:我想从在WebView中运行的HTML页面访问QtObject-调用方法、读/写属性等。据我了解,我需要在QML和HTML... 查看详情

使用 HTML5 websockets 实现基于 web 的实时视频聊天

】使用HTML5websockets实现基于web的实时视频聊天【英文标题】:ImplementingwebbasedrealtimevideochatusingHTML5websockets【发布时间】:2011-05-1208:43:55【问题描述】:有谁知道如何使用HTML5websockets在web应用程序中通过IP实现语音/视频?如果我可... 查看详情

WebSockets 与长轮询与 TCP 可扩展性/易用性

】WebSockets与长轮询与TCP可扩展性/易用性【英文标题】:WebSocketsversusLong-PollingversusTCPScalability/EaseofUse【发布时间】:2011-03-2220:50:25【问题描述】:我正在为基于Java的移动Web应用程序编写后端,我想知道就可扩展性和易用性而言... 查看详情

Websockets 到 localhost 在基于 chromium 的浏览器中失败

】Websockets到localhost在基于chromium的浏览器中失败【英文标题】:Websocketstolocalhostfailsinchromiumbasedbrowsers【发布时间】:2022-01-1122:23:00【问题描述】:我正在尝试构建一个使用vue.js作为前端和django作为后端的聊天网站。它在Firefox中... 查看详情

flink--状态后端(代码片段)

...存储系统。Flink提供了三种类型的状态后端,分别是基于内存的状态后端(MemoryStateBackend)、基于文件系统的状态后端(FsStateBackend)以及基于RockDB作为存储介质的RocksDBStateBackend。简而言之,状态想要持久化就需要通过状态后... 查看详情

ReactJS 使用 WebSockets 与服务器通信

】ReactJS使用WebSockets与服务器通信【英文标题】:ReactJScommunicationwithserverusingWebSockets【发布时间】:2017-08-3016:50:44【问题描述】:我对UI开发、JavaScript、ReactJS还很陌生,所以请原谅缺乏基础知识。我正在尝试开发一个简单的ReactJ... 查看详情

将 Spring websockets (sockJS + Stomp) 与基于令牌的身份验证 (JWT) 一起使用的最佳方法

】将Springwebsockets(sockJS+Stomp)与基于令牌的身份验证(JWT)一起使用的最佳方法【英文标题】:BestapproachtouseSpringwebsockets(sockJS+Stomp)withtokenbasedauthentication(JWT)【发布时间】:2019-04-0121:48:16【问题描述】:我想在SpringBoot应用程序中使用w... 查看详情

存储过程或基于视图的报告更快

】存储过程或基于视图的报告更快【英文标题】:Storedprocedureorviewbasedreportisfaster【发布时间】:2011-07-3111:18:42【问题描述】:我想制作一个rdlc报告,该报告使用基于inputdate标准的连接从3-4个表中获取结果。我想知道哪个更好作... 查看详情

与 mongodb 后端数据库的基于 Spring Security 的身份验证混淆

】与mongodb后端数据库的基于SpringSecurity的身份验证混淆【英文标题】:ConfusionwithSpringSecurity-basedauthenticationwithmongobackeddb【发布时间】:2016-12-1218:21:39【问题描述】:我正在尝试将用户登录到一个网页,其中凭据存储在mongodb中。... 查看详情

HTTPS 上的 Atmosphere Websockets

】HTTPS上的AtmosphereWebsockets【英文标题】:AtmosphereWebsocketsoverHTTPS【发布时间】:2019-04-2413:55:37【问题描述】:我使用基于Atmosphere的Web套接字开发了一个多聊天室,它通过HTTP连接运行良好。但是,当我尝试使用基于HTTPS的连接时... 查看详情

Firefox 断开自签名证书的 websockets 连接

】Firefox断开自签名证书的websockets连接【英文标题】:Firefoxdisconnectswebsocketsconnectionforaselfsignedcertificate【发布时间】:2014-12-3120:20:11【问题描述】:我正在尝试与使用自签名证书的后端服务器建立websocket连接。在Firefox中,我为自... 查看详情

如何通过后端基于过滤器获取计数

】如何通过后端基于过滤器获取计数【英文标题】:HowtoFetchCountBasedonFilterthroughBack-end【发布时间】:2020-10-1103:50:45【问题描述】:假设我们有一个相当大的产品数据库,例如50K手机。我们将这些数据存储在ElasticSearch中。现在我... 查看详情

具有实时和 WebSockets 的 Angular2 + Laravel

】具有实时和WebSockets的Angular2+Laravel【英文标题】:Angular2+LaravelwithRealtime&WebSockets【发布时间】:2016-08-1200:37:50【问题描述】:我构建了一个应用程序,并计划与Angular2和laravel进行实时战斗。例如,您按下“攻击”按钮,您的... 查看详情