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

欢迎!请查看关于页面以了解更多关于这是如何工作的信息。

+2

我们正在尝试配置我们的Clojure服务器来处理websockets,但我们正在使用aws上的datomic的ion基础设施,这使得事情变得比较难做。我想知道是否有人尝试过,或者有任何提示?

5个答案

+1

被选中
 
最佳答案

我没有尝试过用Datomic Ions来做这件事,但是调查了在Google App Engine上做这个的可能性,我相当确信这是不可能的(直接使用)。

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

理论上,Datomic将始终至少有两个节点持续运行(在产品配置中),所以你可能会争辩说它们可以支持一个节点上的websockets服务器,但我想即使在这种情况下也没有保证,因为节点可能会在任何时候失败和循环。

处理这个问题,我的想法是启动一个运行websocket服务器自己的EC2实例,并让客户端连接到该实例。websocket服务器可以对Ions发起调用,但我怀疑您想要推送一些实时数据(否则为什么要使用websocket),因此这样做:拥有一个事务函数,将信息写入消息队列(例如Amazon Simple Queue Service),websocket服务器可以在该队列上监听消息,并将其推送给客户端。

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

  • 只将真正需要写入消息队列的内容,而不是每个已交易的数据项
  • 使用类似于Amazon Simple Queue Service这样的工具,它可以与您发布的消息数量一起伸缩。不要直接使用websocket服务器进行调用

您还可以在Datomic论坛上提出这个问题,那里有一些人擅长回答问题。

by
我想尝试查找我读过的那篇文章,他们解释了如何在App Engine上完成此操作,当然,第一个出现的链接显示App Engine现在支持它(处于测试版)

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

AWS API Gateway 通过lambda支持WebSockets。因此,也许您可以用它设置ions的配置。我还没有亲自尝试,但仍有希望。

+1
by

这取决于您的用例,但如果您只是
使用服务器实时信息保持一个页面的活动状态

您可以使用服务器发送事件和普通HTTP请求
来将消息发送回服务器

如果您遇到服务器循环,客户端将优雅地重新连接到下一个盒子

0
by

你没有说明发生了什么...是不是有 js 错误? 爆炸? 还是不是开始播放 toby keith 了? 我还没连接到使用 web socket 的 on,但我已经使用过

by
我点击得过早。顺便说一下,试试 datomic 论坛可能也很好。
0
by

这是一个旧的讨论,但这是我搜索 Ions + websockets 时出现的唯一一个,所以我发了一条链接,以便其他有这个问题的人受益。

Datomic 论坛中有一个很好的答案

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

...