请在2024年 Clojure 状态调查中分享您的观点!

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

+2

我们试图设置我们的 Clojure 服务器来处理 Websocket,但我们使用 AWS 上的 Datomic 的 ION 基础设施,这使得它并不容易。我想知道是否有人尝试过或者有什么建议?

5 个答案

+1

被选中
 
最佳答案

我没有尝试过使用 Datomic Ions 进行这项操作,但研究了在 Google App Engine 上进行此操作的可能性,我相当确定无法直接完成。

和 App Engine 一样,Ions 是“弹性的”系统 - 它们会在负载变化时启动/停止节点,而 Websocket 是有状态的,也就是说,需要不断运行相同的服务器以便保持与 WebSocket 客户端的连接。

在理论上,Datomic总会在生产配置中始终运行至少2个节点(常开模式),因此你可以认为他们可以在其中一个节点上支持websocket服务器,但我认为即使如此,也无法保证,因为节点可能随时会失败并重新启动。

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

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

  • 只有将真正需要的内容写入消息队列,而不是每个被事务处理的datom
  • 使用类似于Amazon Simple Queue Service的东西,它会随着发布的消息数量进行扩展。不要直接对websocket服务器进行调用

你还可以在此Datomic论坛上提出这个问题,那里有一些人正在回答相关问题。

by
我想尝试找到我之前读过的那篇文章,解释了如何在App Engine上如何做到这一点,当然,第一个出现的链接显示App Engine现在正支持它(处于Beta阶段)

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

AWS API Gateway支持通过 lambdas使用WebSocket。所以也许可以用ions来设定。我没有亲自尝试过,但有希望。

+1
by

这取决于您的使用情况,但如果你只想
让页面实时显示来自服务器的信息

您可以使用服务器发送的事件和普通的HTTP请求来与服务器进行通信
进行消息发送

如果服务器突然中断,客户端将优雅地重新连接到下一个节点

0 投票

我没有说发生了什么...是否有js错误?一个爆炸?是不是开始播放Toby Keith的歌曲了?我还没有使用Websocket连接到在线服务,但我使用了

我提交得太早了。顺便说一句,尝试datomic论坛可能也很有用。
0 投票

这是一条旧帖子,但现在是我搜索Ions + websockets时出现的唯一帖子,所以我为有同样问题的人发布了一个链接。

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

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

...