【问题标题】:Using Java NIO with Unix Domain sockets in non-blocking mode with selectors使用带有选择器的非阻塞模式下的 Java NIO 和 Unix 域套接字
【发布时间】:2012-02-05 15:01:12
【问题描述】:

有没有办法在 Java NIO 中使用 Unix 域套接字? 我想使用 NIO,以便可以在单个线程中使用 Selectors。

我查看了junixsocket,但它似乎只支持普通套接字而不是支持选择器的 NIO 通道。

【问题讨论】:

    标签: java css-selectors nio unix-socket


    【解决方案1】:

    您可以使用项目 jnr-unixsocket,(https://github.com/jnr/jnr-unixsocket),这是我见过的最先进的实现。它完全符合您的要求:nio 概念选择器、通道等

    看@https://github.com/jnr/jnr-unixsocket/tree/master/src/test/java/jnr/unixsocket/example

    【讨论】:

    • 不客气。我设法用它从 nginx 代理读取和写入 http 请求到 unix 套接字域。
    【解决方案2】:

    JDK 16 内置了对 Unix 域套接字的支持。这里是an example from Oracle about using it with NIO

    【讨论】:

    • 很高兴听到这个消息。我正在做的项目早就完成了,但很高兴知道任何未来的项目。
    【解决方案3】:

    我确认XNIO 支持使用 Unix 域套接字,作为“本地套接字”。除了发行说明提及之外,还有:

    但是没有一个 XNIO 通道实现SelectableChannel,所以我担心你将无法使用选择器。

    我建议您在 XNIO 和 GNU ClassPath project 中发布一个问题来改善这种情况,其中 LocalSocket.getSocketChannel 返回 null

    【讨论】:

    • 谢谢。可惜XNIO没有实现Selectors,这是NIO的一大优势。
    • 虽然答案不包括对选择器的支持,但它是最好的答案。
    • 更新:从 XNIO 上的实际开发人员那里得到确认,实际上它不支持 Unix Domain Socket。接口定义了它,但实现还不存在。一个实现正在制作中......
    • 所以等等……你的回答说你确认 XNIO 支持 unix 套接字,但是这里有一条评论说它不支持。你们中只有一个是正确的。在这个问题得到解决之前,我不赞成这个答案。
    • 哇,这是一个相当古老的线程。在那个时候,XNIO API 有一个允许你选择 unix 套接字的接口,但是我得到了一位开发人员的回复,说实现仍然不可用。也许这已经改变了,自从我问到现在已经快 2 年了。
    猜你喜欢
    • 1970-01-01
    • 2010-12-16
    • 2019-04-02
    • 1970-01-01
    • 2012-01-01
    • 2020-10-30
    • 2011-02-10
    • 2012-02-15
    • 1970-01-01
    相关资源
    最近更新 更多