2024 Clojure 状态调查中分享您的想法!

欢迎!请参阅关于页面以获取更多关于该功能的详细信息。

+1

我想像一个这样的例子一样,通过 UNIX 套接字进行 HTTP 请求:使用 curl 和 docker

$ curl --unix-socket /var/run/docker.sock https://127.0.0.1/images/json
[
  {
    "Containers": -1,
    "Created": 1577395270,
    "Id": "sha256:ce6c1e7ac56533e2742030f033cf0d8cf0adc996c7bb87453eb5adc266b2ef2e",
    "Labels": null,
    "ParentId": "",
    "RepoDigests": [
      "busybox@sha256:7fe0cb3632d9ea7b2a9ab4427e339e01f7cdfeff50674804cb8946664976c610"
    ],
    "RepoTags": [
      "busybox:musl"
    ],
    "SharedSize": -1,
    "Size": 1461385,
    "VirtualSize": 1461385
  }
]

据我所知,clj-http 似乎不支持这一点。

在 Clojure 中,这种做法推荐/惯用吗?

3 个答案

+1

被选中
 
最佳答案

简短回答是:做不到。

Java(至少就我所知所看)没有对写入 UNIX 套接字的支持。

更详细的答案是:

你可以发送和管道传输到套接字。netcat "nc" 工具可以在这里工作,即你可以用

选项 A
使用 netcat

nc -lk localhost 8787

然后找到一种方法把 nc 重定向到你想要的套接字

选项 B.

你可以通过 ProcessBuilder 使用外部进程调用上述 curl 命令。

选项 C.

有一些库允许你将 UNIX 套接字从 Java 中创建出来,比如 https://github.com/mcfunley/juds。这涉及到使用 JNI,而“juds”抽象掉了它

by
我在https://github.com/into-docker/clj-docker-client开始了这项工作,并通过https://square.github.io/okhttp/建立了连接。

但现在我们有一个针对此任务的专用库
https://github.com/into-docker/unixsocket-http

希望这能帮助到其他人!
评论 by by
0
by
0

他们表示在 JDK 16 中引入了对 Unix 套接字的支持: https://openjdk.java.net/jeps/380

这是一篇很好的博客文章介绍这些内容
https://inside.java-lang.cn/2021/02/03/jep380-unix-domain-sockets-channels/

...