请分享您的想法来参加 2024 Clojure 状态调查!

欢迎!请访问 关于 页面以获取更多关于这是如何工作的信息。

+2

我们正在尝试设置我们的 clojure 服务器来处理 websockets,但我们使用的是 AWS 上的 datomic 的 ion 基础设施,这使得事情变得不那么容易。我想知道是否有人尝试过或者有一些指导意见?

5 个答案

+1

被选中
 
最佳答案

我没有尝试过使用 Datomic Ions 做这件事,但经过研究通过 Google App Engine 做这件事的可能性,我相当确定这不可能(直接实现)。

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

从理论上讲,Datomic 将始终至少有两个节点持续运行(在生产配置中),所以你可能认为它们可以在其中一个节点上支持 websocket 服务器,但我认为即使在那里你也无法保证,因为一个节点可能随时失败并被轮换。

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

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

  • 只将真正需要写入的消息队列,而不是每个正在交易的数据atom
  • 使用类似于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票数
+1
by

这取决于您的用例,但如果您只想保持
一页实时显示来自服务器的信息

您可以只使用服务器发送事件和正常的http请求
向服务器发送消息

如果服务器对您进行轮换,客户端将优雅地重新连接到下一个容器

0票数

你没有说明发生了什么...是否有js错误?爆炸了吗?开始播放Toby Keith的歌曲了吗?我没有连接到使用web socket的on,但我已经使用了

我太早点了提交。顺便说一句,尝试datomic论坛可能也不错。
0票数

这是一个旧帖子,但这是我在搜索离子 + web sockets时唯一出现的帖子,所以我发帖供有同样问题的其他人参考。

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

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

...