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的事务吞吐量。所以

  • 只将真正需要的信息写入消息队列,而不是每个事务的datom
  • 使用类似Amazon Simple Queue Service的解决方案,它会随着发布的消息数量自动扩展。不要直接通过websocket服务器进行调用

你还可以在Datomic论坛上提出这个问题,那里有一些很棒的人回答问题。

我想找找我看过的那篇文章,那篇文章解释了如何在App Engine上实现这个功能,当然,第一个出现的链接显示App Engine现在支持这个功能(处于测试版)

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

AWS API Gateway通过Lambdas支持WebSockets。因此,可能有一种办法可以与ions一起设置。我还没有亲自尝试,但仍有希望。

+1

这取决于你的使用情况,但如果你只是
用来自服务器的实时信息保持页面的活跃状态

您可以使用服务器发送事件和常规HTTP请求向服务器发送消息

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

0
by

你没有说发生了什么...是JavaScript错误吗?爆炸了吗?是Toby Keith开始播放了吗?我还没有通过websocket连接到 ,但我已经使用了

by
我点击提交太早了。顺便说一下,试试datomic论坛也可能是个好主意。
0
by

这是一个旧的话题了,但在我搜索Ions + websockets时,这是我唯一找到的,所以我把链接发出来,供有同样问题的其他人参考。

Datomic论坛有一个很好的答案

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

...