2024 年 Clojure 状态调查中分享您的想法!

欢迎!请参阅 关于 页面了解如何使用本站的相关信息。

+2

我们正在尝试设置 Clojure 服务器以处理 websockets,但我们使用的是 AWS 上的 Datomic Ion 基础设施,这使得事情变得不那么简单。我想知道是否有人尝试过或有什么建议?

5 个答案

+1

选定
 
最佳答案

我还没有尝试使用 Datomic Ions 进行此操作,但我已经研究了在 Google App Engine 上进行此操作的可能性,我相当确定这是不可能的(原配)。

Ions,就像 App Engine,是“弹性”系统 - 它们将在负载变化时启动/停止节点,而 websockets 是有状态的,即相同的服务器需要持续运行,因为它维护着与 websockets 客户端(们)的连接。

理论上,Datomic 将始终保持至少两个节点持续运行(在生产配置中),因此您可能会认为其中之一可以支持 websockets 服务器,但我想说即使在这种情况下,您也没有保证,因为节点可能会在任意时刻失败并重新启动。

处理这种情况的方法是,启动自己的EC2实例运行websocket服务器,并让客户端连接到该服务器。websocket服务器可以向Ions发起调用,但您可能想要推送实时数据(否则为什么要使用websocket),因此这样做的方式是有一个事务函数,将信息写入消息队列(例如亚马逊简单队列服务),websocket服务器可以监听该队列上的消息,并将其推送到客户端。

请记住将事务函数内部的工作量保持在最低,否则Datomic的事务吞吐量可能会受到严重影响。所以

  • 只将您真正需要的东西写入消息队列,而不是每个被事务处理的数据块
  • 使用类似亚马逊简单队列服务的东西,它会随着发布的消息数量一起扩展。不要直接对你的websocket服务器进行调用

您也可以在这个Datomic论坛上提出这个问题,那里有一些人很好地回答了相关问题。

头像
我想找出我读过的介绍如何在App Engine上实现这一点的文章,当然,搜索结果中第一个链接显示App Engine现在支持它(在BETA版中)

https://cloud.google.com/blog/products/application-development/introducing-websockets-support-for-app-engine-flexible-environment
+3
头像

AWS API网关通过lambdas支持WebSockets。所以可能存在一种方法通过ions进行设置。我还没有亲自尝试,但是有希望。

+1
头像

这取决于您的具体用例,但如果您只是需要
使用由服务器提供的信息将页面保持活跃

您就可以使用服务器端事件和普通HTTP请求来处理从服务器发回的消息
消息。

如果服务器对您进行循环,客户端将优雅地连接到下一个框

0

您没有说明发生了什么...是否有js错误?爆炸了?是不是开始播放 Toby Keith 的歌曲了?我还没有连接到WebSocket,但使用过

我太早按下了提交。顺便说一句,也可以尝试datomic论坛。
0

这是一个很旧的帖子了,但是在搜索“ions + websockets”时只出现了这个,所以我为有这个问题的人发了一个链接。

Datomic 论坛上有一个非常好的答案

https://forum.datomic.com/t/websockets-from-ions/1255

...