java中有没有类似socketpair这样的接口?
Linux上的c++通过socketpair可以生成一对socket,可以进行本机的进程间通信,这一对socket也是文件描述符,不知道Java上有没有对应的实现呢?
java标准库里面没有提供UDS的支持,因为这个不是跨平台的,譬如windows下就没有UDS支持(PS:严谨一点查了下新闻,win10 17063之后支持UDS:https://devblogs.microsoft.com/commandline/af_unix-comes-to-windows/)
这就像java同样不可能支持Windows消息这样的IPC手段,理由也同样是这个不是跨平台的。
所以,除了针对那些对通讯的成本特别敏感的场景,其他走回环设备是比较合适的方案。
如果确实需要用uds,有第三方库:
https://github.com/mcfunley/juds
https://github.com/kohlschutter/junixsocket
netty有unix channel
需要标准库的话
jep 380会增加unix socket到java中,和16一起发布,还得等半年
【 在 IcyFenix 的大作中提到: 】
: java标准库里面没有提供UDS的支持,因为这个不是跨平台的,譬如windows下就没有UDS支持(PS:严谨一点查了下新闻,win10 17063之后支持UDS:https://devblogs.microsoft.com/commandline/af_unix-comes-to-windows/)
: 这就像java同样不可能支持Windows消息这样的IPC手段,理由也同样是这个不是跨平台的。
java理论上可以在不支持的平台上抛exception啊…
话说socketpair没规定必须是uds吧
【 在 IcyFenix 的大作中提到: 】
: java标准库里面没有提供UDS的支持,因为这个不是跨平台的,譬如windows下就没有UDS支持(PS:严谨一点查了下新闻,win10 17063之后支持UDS:https://devblogs.microsoft.com/commandline/af_unix-comes-to-windows/)
: 这就像java同样不可能支持Windows消息这样的IPC手段,理由也同样是这个不是跨平台的。
: ....................
对,我现在就是用的Loopback,通过socket进行通信,不知道跟socketpair相比,效率如何,我总觉得用file descripor更靠谱一些
【 在 IcyFenix 的大作中提到: 】
: java标准库里面没有提供UDS的支持,因为这个不是跨平台的,譬如windows下就没有UDS支持(PS:严谨一点查了下新闻,win10 17063之后支持UDS:https://devblogs.microsoft.com/commandline/af_unix-comes-to-windows/)
: 这就像java同样不可能支持Windows消息这样的IPC手段,理由也同样是这个不是跨平台的。
: 所以,除了针对那些对通讯的成本特别敏感的场景,其他走回环设备是比较合适的方案。
: ...................
回环相比起uds的效率损失自然就是数据从网络栈中绕了一圈,逐层封包,触及回环设备,然后逐层解包,这个过程中计算某些包头包尾的信息,如校验和,以及netfilter中钩子路由(如有)都是相对耗时的。
但很难脱离具体场景去评价这样得效率损失高低、是否值得。如果真的要扣效率,uds也不是最高的ipc方式,尽管省略了网络栈,但数据还是要在用户态和内核态之间来回拷贝,这也是相对耗时的。
【 在 dingdongbell 的大作中提到: 】
: 对,我现在就是用的Loopback,通过socket进行通信,不知道跟socketpair相比,效率如何,我总觉得用file descripor更靠谱一些