java - करण - सार्वजनिक पुस्तकालय की परिभाषा




सर्वर पक्ष के लिए अच्छा एक्सएमपीपी जावा पुस्तकालय? (7)

मैं जावा में एक साधारण एक्सएमपीपी सर्वर को लागू करने की उम्मीद कर रहा था।

मुझे जो पुस्तकालय चाहिए वह एक पुस्तकालय है जो क्लाइंट से xmpp अनुरोधों को पार्स और समझ सकता है। मैंने स्मैक (नीचे उल्लिखित) और जेएसओ को देखा है। स्मैक केवल क्लाइंट होने लगते हैं, जबकि यह पैकेटिंग पैकेट्स की मदद कर सकता है, यह नहीं जानता कि ग्राहकों को कैसे प्रतिक्रिया दें। क्या जेएसओ बनाए रखा है यह बहुत पुराना दिखता है। एकमात्र आशाजनक एवेन्यू ओपनफायर को अलग करना है जो एक संपूर्ण वाणिज्यिक (ओएसएस) एक्सएमपीपी सर्वर है।

मैं नेटटी या मीना के शीर्ष पर कोड की कुछ पंक्तियों की उम्मीद कर रहा था, इसलिए मैं तार से कुछ संदेशों को संसाधित करना शुरू कर सकता था।

जो -

वैसे जो मैं करने की कोशिश कर रहा हूं उसका उत्तर कुछ हद तक लंबा है - मैं इसे छोटा रखने की कोशिश करूंगा।

दो चीजें हैं, जो केवल ढीले से संबंधित हैं:

1) मैं एक एक्सएमपीपी सर्वर लिखना चाहता था क्योंकि मुझे लगता है कि दो क्लाइंट्स के संवाद के लिए कस्टम प्रोटोकॉल लिखना है। असल में मैं एक नेटवर्क वाले आईफोन ऐप के बारे में सोच रहा हूं - लेकिन मैं निम्न स्तर के बाइनरी प्रोटोकॉल पर भरोसा नहीं करना चाहता क्योंकि एक्सएमपीपी जैसे कुछ का उपयोग करना है कि ऐप स्थानीय वाईफाई आधारित ऐप से इंटरनेट पर आधारित "बहुत बड़ा" हो सकता है। ...

एक्सचेंज किए गए संदेश अपेक्षाकृत कम विलंबता होनी चाहिए, इसलिए सख्ती से एक द्विआधारी प्रोटोकॉल बोलना सबसे अच्छा होगा, लेकिन मुझे लगा कि एक्सएमपीपी ने बहुत अधिक ओवरहेड नहीं पेश किया है, तो मैं यह खोज सकता हूं कि मैं इसका उपयोग कर सकता हूं और उसके बाद इसकी विस्तारशीलता का लाभ उठा सकता हूं और बाद में flexability।

2) मैं टेराकोटा के लिए काम करता हूं - इसलिए मेरे पास सब कुछ क्लस्टर करने के लिए यह पागल झुकाव है। जैसे ही मैंने कुछ कस्टम सर्वर कोड लिखने के बारे में सोचना शुरू किया, मुझे लगा कि मैं इसे क्लस्टर करना चाहता हूं। टेराकोटा जावा पीओजेओ को छोटा कर देता है, इसलिए मेरा विचार टेराकोटा के लिए एक प्रदर्शन ऐप के रूप में एक सुपर सरल एक्सएमपीपी सर्वर बनाना था। असल में प्रत्येक उपयोगकर्ता एक टीसीपी कनेक्शन पर सर्वर से कनेक्ट होगा, जो उपयोगकर्ता को हैशैप में पंजीकृत करेगा। प्रत्येक उपयोगकर्ता के पास कतार से संदेश लेने वाले श्रोता धागे के साथ एक LinkedBlockingQueue होगा। फिर कोई भी कनेक्टेड उपयोगकर्ता जो किसी अन्य उपयोगकर्ता को संदेश भेजना चाहता है (जैसे कोई पुराना चैट एप्लिकेशन) कनेक्शन पर उस उपयोगकर्ता को बस एक एक्सएमपीपी संदेश (सामान्य रूप से) जारी करता है। सर्वर इसे उठाता है, मानचित्र में संबंधित उपयोगकर्ता ऑब्जेक्ट को देखता है और संदेश को कतार पर रखता है। चूंकि कतार क्लस्टर है, भले ही गंतव्य उपयोगकर्ता एक ही भौतिक सर्वर, या एक अलग भौतिक सर्वर से जुड़ा हुआ है, संदेश वितरित किया गया है और जो धागा सुन रहा है उसे उठाता है और इसे गंतव्य उपयोगकर्ता के टीसीपी कनेक्शन को वापस भेजता है।

तो - सारांश से बहुत छोटा नहीं है मुझे डर है। लेकिन मैं यही करना चाहता हूं। मुझे लगता है कि मैं सिर्फ # 1 को पूरा करने के लिए ओपनफायर के लिए एक प्लगइन लिख सकता हूं लेकिन मुझे लगता है कि यह बहुत सारी नलसाजी का ख्याल रखता है, इसलिए # 2 करना मुश्किल है (विशेष रूप से जब से मैं बहुत कम कोड की उम्मीद कर रहा था जो कि फिट हो सकता है सरल 10-20 केबी मेवेन परियोजना)।


आपका सबसे अच्छा शर्त मौजूदा सर्वर का उपयोग करना है, और इसमें अपनी कार्यक्षमता जोड़ना है। स्क्रैच से एक संपूर्ण सर्वर लिखना, यहां तक ​​कि लाइब्रेरी का उपयोग करना, आपके अपेक्षा से बहुत कठिन होगा।

क्या आप हमें उस समस्या के बारे में और बता सकते हैं जिसे आप हल करने की कोशिश कर रहे हैं? फिर हम आपको एक उपयुक्त सर्वर पर इंगित कर सकते हैं, और प्लग इन करने के लिए सही जगह पर आपकी सहायता कर सकते हैं।


इग्नाइट रीयलटाइम अपने टिंडर एपीआई को साझा करता है जो कि सर्वर-साइड घटकों और संभवतः अन्य सर्वरों के निर्माण के लिए ओपनफायर से निकाला गया मूल भवन ब्लॉक है। यह बुनियादी एक्सएमपीपी बिल्डिंग ब्लॉक लागू करता है और आप वहां से शुरू करने के लिए स्वतंत्र हैं।


इसकी जांच करें:

यह एक निम्न स्तर की पुस्तकालय है। यह ऊष्मायन स्थिति में है और ऐसा लगता है कि कोई भी इसे धक्का दे रहा है। लेकिन यह एक महान एपीआई है और मुझे उम्मीद है कि यह प्रगति करेगा।

http://java.net/project/jso-jabber-stream-objects


मुझे जावा पर आधारित एक अच्छा xmpp सर्वर मिला: http://www.tigase.org/


मुझे लगता है कि आपने पहले ही सही समाधान को देखा है: ओपनफायर

यह एक वाणिज्यिक समाधान नहीं है। यह अपाचे लाइसेंस के तहत जारी जावा में लिखित मीना और जेट्टी के शीर्ष पर एक एक्सएमपीपी सर्वर है। आपने जो पूछा उससे काफी करीब आता है। जबकि मुझे पता है कि आपने लाइब्रेरी के लिए कहा है, तो कुछ स्थिर विकसित ओपन सोर्स सॉफ़्टवेयर का उपयोग क्यों न करें जिसे आसानी से ओपनफायर की तरह बढ़ाया जा सकता है?


मैं एक ही खोज के माध्यम से चला गया। मैंने पहले स्मैक की कोशिश की और फिर एहसास हुआ कि यह सी 2 एस (क्लाइंट से सर्वर) पर लक्षित है और मुझे जो चाहिए वह नहीं था। मैंने टिंडर को देखा लेकिन लाइसेंसिंग मॉडल पसंद नहीं आया (जब मैंने देखा कि यह बहुत अधिक कच्चा था)। मैंने आखिरकार व्हेक को देखा और महसूस किया कि मुझे इसकी आवश्यकता थी - लेकिन इसमें बहुत कुछ याद आ रहा है (यही कारण है कि टिंडर मेरे बारे में सोचता है)।

तो..मेरा समाधान? फोर्कड व्हाक, चीजों को सारणीबद्ध करने के लिए कुछ कोड जोड़ा, और इसे उपयोग करना आसान बनाने का प्रयास करें: http://github.com/Communitivity/Adirondack

मैंने बाह्य घटक आधारित एजेंट बनाने में मदद के लिए एक स्कैला लाइब्रेरी लिखी, http://github.com/Communitivity/Shellack और http://github.com/Communitivity/MinimalScalaXMPPComponent

मेरे मुख्य लक्ष्यों में से एक था जल्दी से एक घटक लिखना आसान बनाना। इस तरह के एक घटक का एक उदाहरण नीचे है:

object Main {

/**
* @param args the command line arguments
*/
  def main(args: Array[String]) :Unit = {
      new XMPPComponent(
        new ComponentConfig() {
            def secret() : String = { "secret.goes.here" }
            def server() : String = { "communitivity.com" }
            def subdomain() : String = { "weather" }
            def name() : String = { "US Weather" }
            def description() : String = { "Weather component that also supported SPARQL/XMPP" }
        },
       actor {
        loop {
            react {
                case (pkt:Packet, out : Actor) =>
                    Console.println("Received packet...\n"+pkt.toXML)
                    pkt match {
                        case message:Message =>
                            val reply = new Message()
                            reply.setTo(message.getFrom())
                            reply.setFrom(message.getTo())
                            reply.setType(message.getType())
                            reply.setThread(message.getThread())
                            reply.setBody("Received '"+message.getBody()+"', tyvm")
                            out ! reply
                        case _ =>
                            Console.println("Received something other than Message")
                    }
                 case _ =>
                    Console.println("Received something other than (Packet, actor)")
            }
        }
       }
    ).start
  }
}

Vorpal पर एक नज़र डालें। इसका एक जावा ईई 6 ढांचा है जो XEP-0114 प्रोटोकॉल लागू करता है।





xmpp