请在2024 Clojure状态调查!分享您的想法。

欢迎!有关如何工作的详细信息,请参阅关于页面。

+2
Libs

我们正在尝试设置clojure服务器以处理websockets,但我们使用的是Datomic的ion基础设施在AWS上,这使得事情变得更加困难。我想知道是否有人尝试过或者有任何建议?

5 答案

+1

被选中
 
最佳答案

我还没有尝试过使用Datomic Ions来这样做,但经过研究,我非常确信这不可能直接实现(开箱即用)。

Ions,像App Engine一样,是'弹性'系统 - 它们会根据负载的变动启动/停止节点,而websockets是状态性的,即相同的服务器需要持续运行,因为要维护与websocket客户端的连接。

理论上,Datomic将始终至少运行两个节点(在生产配置中),所以你可能会认为它们可以在其中一个节点上支持websockets服务器,但我认为即使在这里,你也无法保证,因为节点可能会在任何时候失败和旋转。

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

请记住,将工作内容限制在事务函数内,尽可能少,否则你的Datomic事务吞吐量可能会严重受到影响。所以

  • 只把真正需要写入消息队列的内容,而不是每个被事务处理的datom
  • 使用跟随着你发布消息数量的亚马逊简单队列服务之类的产品进行扩展。不要直接调用你的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网关通过lambdas支持WebSocket协议。所以也许我们可以通过ions设置它。我还没亲自试验,但是我看到了希望。

+1
by

这取决于你的用例,但如果你只是需要
在服务器实时提供信息的情况下保持页面活跃

您可以仅通过服务器发送事件和常规 HTTP 请求来实现与服务器之间的消息通信

如果服务器在您身上进行循环,客户端会优雅地重新连接到下一个服务器

0

您没有说明具体发生了什么...是否有 JavaScript 错误?是否发生爆炸?是否开始播放 toby keith 的歌曲?我还没有连接到任何使用 web sockets 的 on,但我曾经使用过

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

这是一个古老的帖子,但在我搜索 Ions + websockets 时,只有这个帖子出现,所以我为有此问题的其他人发布了这个链接。

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

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

...