2009-05-01 7 views
7

मैं जावा में एक इंटर-प्रोसेस संचार पुस्तकालय की तलाश में हूं। मैं JVMs के बीच छोटे संदेश भेजना चाहता हूं और यदि मैं कर सकता हूं तो साझा स्मृति का उपयोग करके इसे करना चाहूंगा।इंटर जेवीएम संचार

उत्तर

2

मैं आपको Terracotta पर एक नज़र डालने का सुझाव दूंगा। मुझे नहीं पता कि यह आपकी आवश्यकताओं के अनुरूप होगा, क्योंकि टेराकोटा का मुख्य लक्ष्य निर्बाध स्केलेबिलिटी है ("एपीआई" केवल मेमोरी एक्सेस है), लेकिन इसमें निश्चित रूप से मैसेजिंग एकीकरण मॉड्यूल है। यह opensource है।

चीयर्स।

+0

मैं टेराकोटा को देखा कोशिश, लेकिन यह इस समस्या के लिए एक बहुत भारी समाधान है। Thx – Javamann

11

जावा एनआईओ मेमोरी-मैप की गई फ़ाइलों के लिए समर्थन करता है। यदि एकाधिक JVMs एक ही फ़ाइल को मेमोरी-मैप करते हैं तो वे इसे साझा मेमोरी के रूप में उपयोग कर सकते हैं।

यहां एक फ़ाइल मैपिंग मेमोरी का एक उदाहरण है।

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(); } 

लिनक्स पर आप shm.raw फ़ाइल/dev/shm/स्मृति आधारित फाइल सिस्टम में बना सकते हैं। इससे किसी भी डिस्क I/O से बचने में मदद मिलेगी।

अधिक जानकारी के लिए इस लेख Introduction to Memory-Mapped IO in Java

पढ़ा इसके अलावा, आप अभी भी एक तरह से की आवश्यकता होगी साझा स्मृति के लिए लिखते हैं पढ़ syncronize करने के लिए /। जब एक पूरा संदेश लिखा गया है तो प्रेषक JVM को रिसीवर JVM को सिग्नल करने की आवश्यकता होगी।

जावा एनआईओ का सॉकेट चैनल का उपयोग छोटे संदेशों के लिए बेहतर हो सकता है क्योंकि संदेश प्राप्त होने पर रिसीवर को अधिसूचित किया जा सकता है। साझा संदेश केवल बड़े संदेश भेजते समय वास्तव में मदद करेगा।

JVMs के बीच भारतीय दंड संहिता के लिए विभिन्न मशीनों पर JIPC

+1

इंटर-मशीन के लिए मैं संचार से जेग्रुप या सॉकेट का उपयोग कर रहा हूं और इंट्रा-जेवीएम के लिए एक कतार काम करता हूं। मेरे संचार घटक में छेद एक ही मशीन पर इंटर-प्रोसेस है। – Javamann