问题标签 [http-kit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2055 浏览

clojure - HTTP Kit WebSocket 客户端

我有点困惑如何创建 http-kit WebSocket 客户端。在网站上有一个如何创建 WebSocket 服务器的示例,创建客户端可能很简单,但我似乎无法正确处理。有没有不关注 Javascript 客户端的示例?

PS这个问题中的一些讨论,但只是 aleph 示例,并表明 http-kit 现在支持 WebSocket 客户端。

0 投票
1 回答
868 浏览

clojure - 码头线程被阻塞和死锁

我在我的服务器上使用码头“7.6.8.v20121106”作为https://github.com/ring-clojure/ring/tree/master/ring-jetty-adapter的一部分。

我正在使用带有以下代码的http://http-kit.org/拨打电话。本质上,我正在进行服务器调用,但忽略了响应。我发现在那之后所有服务器线程都被阻塞/死锁。这似乎是一种非常简单的方法来关闭服务器并想了解这里发生了什么。

来自客户端的代码是:

线程状态 线程阻塞在

sun.nio.cs.StreamEncoder.write(StreamEncoder.java:118)

并陷入僵局

java.io.PrintStream.write(PrintStream.java:479)

如果有人可以帮助解决这里发生的事情,我将不胜感激。

0 投票
2 回答
1445 浏览

http - 使用 clojure 在 Heroku 上的 HTTP 流/分块响应

我正在制作一个使用分块 HTTP 响应将数据流式传输到客户端的 clojure Web 应用程序。当我使用 本地运行它时,这很好用foreman,但是当我将它部署到 Heroku 时它不能正常工作。

可以在我的 github 上找到展示此行为的最小示例。前端(in resources/index.html)执行 AJAX GET 请求并在响应块到达时打印它们。服务器每秒使用 http-kit 向连接的客户端发送一个新块。按照设计,HTTP 请求永远不会完成。

当相同的代码部署到 Heroku 时,HTTP 连接在发送第一个块后立即被服务器关闭。似乎是 Heroku 的路由网格导致了这种断开连接。

这也可以通过使用 curl 执行 GET 请求来看到:

任何人都可以提出为什么会这样吗?Heroku 的 Cedar 堆栈应该支持 HTTP 流。代码使用正确运行的事实foreman表明它是 Heroku 的路由网格中的某些东西导致它中断。

失败项目的现场演示:http: //arcane-headland-2284.herokuapp.com/

0 投票
2 回答
2751 浏览

clojure - Clojure:我正在使用 http-kit 向服务器发布请求,但它对我来说效果不佳

注意:我解决了我的问题。但是,它进行了一些增量更改。如果您遇到此页面,请随时查看我的 github,看看我是如何使这个应用程序工作的。


我正在使用 http-kit 向 btc-china 发布请求。我想使用他们的交易API。我可以用 python 很好地做到这一点,但由于某种原因,我一直使用 clojure 和 http-kit 得到 401。我在下面发布了一段代码,这可能表明我没有正确使用 http-kit。除此之外,如果您想查看,这里是我的完整代码的 github:https ://github.com/gilmaso/btc-trading 以下是 btc-china api 文档:http ://btcchina.org /api-trade-documentation-en

0 投票
1 回答
3266 浏览

clojure - 使用 core.async 通道在 clojure 中使用 http-kit 的发布结果是否合理?

我是 clojure 的新手,正在编写一个库,将发布结果发送到服务器以获取响应。我通过将响应放在 core.async 通道上来使用它。这是理智还是有更好的方法?

这是我正在做的事情的高级概述:

这是我正在使用的实际代码:https ://github.com/gilmaso/btc-trading/blob/master/src/btc_trading/btc_china.clj#L63

它有效,但我很难验证这是否是解决此问题的正确方法。

0 投票
1 回答
651 浏览

clojure - clojure 中使用 http-kit 的同步 POST

我正在尝试使用 clojure 中的 http-kit 客户端库来执行返回承诺的同步帖子。有没有办法限制做实际帖子的线程数?

我能找到的所有使用内置线程池的示例都使用调用的较低级别的原始函数,request但它们都是用于 http/get 的。

谢谢

0 投票
1 回答
859 浏览

clojure - Clojure 中的可扩展聊天服务器。存在和消息到达 b/w 重新连接的问题

我正在尝试在 Clojure 中构建一个可扩展的聊天服务器。我正在使用 http-kit、compojure 和 redis pub/sub 在不同节点之间进行通信(扇出方法)。服务器将使用 websockets 连接 b/w 客户端-服务器,并回退到长轮询。单个用户可以有多个连接以与浏览器中的每个选项卡的一个连接聊天,并且消息应传递给所有连接。

所以基本上当用户连接时,我将通道存储在一个原子中,随机 uuid 为

消息被发布到 websockets 和长轮询通道的公共路由,消息结构看起来像

服务器在原子中查找 :from 和 :to 用户 ID 的所有通道,并将消息发送到相应用户的连接通道,它还将消息发布到 redis 服务器上,连接节点在其中查找存储在其中的通道拥有 atom 并将消息传递给相应的用户。

所以我遇到的问题是,如何正确实现存在。基本上,当通道断开连接时,http-kit 会向您发送一个状态,状态可以是“服务器关闭”或“客户端关闭”,而我可以处理服务器断开连接(客户端将自动重新连接)但是当断开连接时我遇到了问题例如,从客户端发生。用户导航到另一个页面并在几秒钟后连接。当客户端断开连接时,如何确定用户已下线。此外,我担心消息到达 b/w 在长轮询模式下重新连接(我的长轮询超时为 30 秒)。

还请为上述架构提出一个好的存在机制。谢谢。

如果您需要更多信息,请发表评论。谢谢

编辑#1:

你能推荐一个关于在聊天服务器中实现存在的好教程/材料吗,我似乎找不到任何东西。

我当前的解决方案-> 我目前正在为特定用户 ID 的连接通道维护全局计数和最后连接时间戳,当用户断开连接时,计数会减少,并且会执行 10 秒的超时,这将检查用户是否有再次重新连接(即最后一个连接的标记是 10 秒前并且计数仍然为零),如果不是,那么据说用户已经离线,你会推荐这个解决方案,如果不是为什么,或者任何改进或更好的方法表示赞赏。另请注意,我在 http-kit 中使用计时器/计划任务,这些超时会显着影响性能吗?

0 投票
2 回答
421 浏览

clojure - http-kit 通过通道发送响应和只返回地图有什么区别

正如标题所说。通过通道发送响应和只返回地图有什么区别。

0 投票
1 回答
197 浏览

python - Python 请求超时 + Clojure HttpKit 服务器但不是环服务器

我有一些环形路线,我正在以两种方式之一运行。

  1. lein ring server, 用lein-ring插件
  2. 使用org.httpkit.server,如 (hs/run-server app {:port 3000}))

它是一个 Web 应用程序(由 Angular.js 浏览器客户端使用)。

我使用 Requests 库用 Python 编写了一些 API 测试:

当我使用lein ring server时,此请求在 JS 客户端和 Python 测试中运行良好。

当我使用httpkit时,这在 JS 客户端中运行良好,但 Python 客户端超时

socket.timeout:超时

我不知道为什么 Python 客户端超时。它会发生httpkit但不会发生lein-ring,所以我只能假设原因与差异有关。

  • 我查看了 WireShark 中的流量,两者看起来都给出了正确的响应。两者都具有相同的Content-Length字段(15 个字节)。
  • 我已将线程数提高到 10(不需要)并且没有任何变化。

有什么想法有什么问题吗?

0 投票
1 回答
861 浏览

http - 使用带有 core.async 通道的 http-kit 长轮询

我有一些长时间运行的进程,当进程完成时,它会返回一个带有结果的 core.async 通道。

现在我想使用带有 HTTP-kit 的长轮询返回该结果。不幸的是,我有点困惑正确的做法是什么。

目前我有一个处理程序(连接到一个路由),它启动处理调用并在完成后发送结果:

它有效,但我不确定这是否是正确的方法。

编辑因为<!!是阻塞我现在在 go-loop 中尝试一个非阻塞变体