Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jvm间通信_Java_Rpc - Fatal编程技术网

Java jvm间通信

Java jvm间通信,java,rpc,Java,Rpc,我正在寻找Java中的进程间通信库。我希望在JVM之间发送小消息,如果可以的话,我希望使用共享内存来完成。我建议您查看一下。我不知道它是否符合您的要求,因为Terracotta的主要目标是无缝可伸缩性(“api”只是内存访问),但它肯定有消息传递集成模块。它是开源的 干杯。Java NIO支持内存映射文件。如果多个JVM内存映射同一个文件,则可以将其用作共享内存 下面是一个内存映射文件的示例 try { int shmSize = 1024; RandomAccessFile file = ne

我正在寻找Java中的进程间通信库。我希望在JVM之间发送小消息,如果可以的话,我希望使用共享内存来完成。我建议您查看一下。我不知道它是否符合您的要求,因为Terracotta的主要目标是无缝可伸缩性(“api”只是内存访问),但它肯定有消息传递集成模块。它是开源的


干杯。

Java NIO支持内存映射文件。如果多个JVM内存映射同一个文件,则可以将其用作共享内存

下面是一个内存映射文件的示例

try {
int shmSize = 1024;
RandomAccessFile file = new RandomAccessFile("shm.raw","rw");

// inialize file size
if(file.length() < shmSize) {
  byte[] tmp = new byte[shmSize];
  file.write(tmp);
  file.seek(0); // seek back to start of file.
}

// memory-map file.
FileChannel ch = file.getChannel();
MappedByteBuffer shm = ch.map(FileChannel.MapMode.READ_WRITE, 0, shmSize);
ch.close(); // channel not needed anymore.
shm.load(); // force file into physical memory.

// now use the ByteBuffer's get/put/position methods to read/write the shared memory

} catch(Exception e) { e.printStackTrace(); }
试试看{
int-shmSize=1024;
RandomAccessFile文件=新的RandomAccessFile(“shm.raw”、“rw”);
//最小化文件大小
if(file.length()
在Linux上,您可以在/dev/shm/a基于内存的文件系统中创建shm.raw文件。这将有助于避免任何磁盘I/O

有关更多详细信息,请阅读本文

此外,您还需要一种方法来同步对共享内存的读/写操作。当完整的消息被写入时,发送方JVM需要向接收方JVM发送信号

使用JavaNIO的SocketChannel可能更好地处理小消息,因为当接收到消息时可以通知接收者。共享内存只有在发送大消息时才真正有用

对于不同机器上JVM之间的IPC,请尝试

对于机器间,我使用的是来自通信的jgroup或socket,对于JVM内,队列工作。我的通信组件中的漏洞是同一台机器上的进程间。我查看了Terracotta,但对于这个问题,它是一个非常沉重的解决方案。谢谢