एक सरल एपीआई के लिए एक अंतर-भाषा आरपीसी प्रोटोकॉल डिजाइन कैसे पहुंचे?

मैं एक (बहुत ही बुनियादी) वितरित अनुप्रयोग बना रहा हूं जिसमें एक पायथन सर्वर और सी # क्लाइंट ज़ीरोएमक्यू पर जेसन के माध्यम से एक-दूसरे से बात कर रहा है। जब क्लाइंट में कोई विधि लागू की जाती है, तो यह एक संदेश लिखता है और उसे उस सर्वर पर भेजता है जहां एक संबंधित फ़ंक्शन निष्पादित किया जाता है, इसलिए यह मूल रूप से एक प्रकार का आरपीसी है।

यह समझने के लिए कि संदेशों के साथ क्या करना है, ऐप एक 'प्रोटोकॉल' (वास्तव में कीवर्ड का एक सेट) पर निर्भर करता है जो क्लाइंट और सर्वर पक्ष पर डुप्लिकेट किया गया है, ऐसा कुछ:

namespace Draftsocket
{
    public static class Protocol
    {
        public struct ClientAction
        {
            //client-issued action lines
            public const string CMD = "COMMAND";
            public const string ERROR = "CLIENT_ERROR";
            public const string EVENT = "EVENT";
            public const string CONTINUE = "CONTINUE";
            public const string CONSOLE = "CONSOLE";
        }
    ...etc...

( C# में फ़ाइल को पूरा करने के लिए लिंक करें)

class Protocol(object):

    class ClientAction:
        CMD = "COMMAND"
        ERROR = "CLIENT_ERROR"
        EVENT = "EVENT"
        CONTINUE = "CONTINUE"
        CONSOLE = "CONSOLE"
...etc...

( पायथन में फ़ाइल को पूरा करने के लिए लिंक )

इसका उपयोग तब संदेशों को लिखने और पढ़ने के लिए किया जाता है, जैसे:

public static ClientMessage NewCommand(string Name)
{
    return new ClientMessage(Protocol.ClientAction.CMD, Protocol.Status.OK, Name);
}

यह समय के लिए काम करता है लेकिन आम तौर पर भयानक है: किसी भी व्यक्ति के लिए स्ट्रिंग-टाइप और असुविधाजनक जो अनुप्रयोग को फ्रेमवर्क के रूप में उपयोग करना चाहते हैं।

मैं इस प्रोटोकॉल को इस तरह से पुन: सक्रिय करने के तरीके पर निर्णय नहीं ले सकता कि या तो भाषा-विशिष्ट कार्यान्वयन को एक-दूसरे को स्वचालित/सिंक कर देगा या, उदाहरण के लिए, यदि प्रोटोकॉल सिंक/पुरानी हो गई है तो चेतावनी को फायर करें?

मान लीजिए कि मुझे एन्म्स और/या मैसेजपैक के कुछ प्रकार के रूप में देखना चाहिए, लेकिन मैं इसके साथ आगे बढ़ने के लिए पर्याप्त योग्य महसूस नहीं करता हूं।

TIA।

0

1 उत्तर

I would use protobuf or thrift. They are meant to solve the problem of data exchange between different platforms. See this for example: Biggest differences of Thrift vs Protocol Buffers?

0
जोड़ा
तब प्रोटोबफ? .. मुझे पहले उनका उपयोग करने का निर्देश दिया गया है, इसलिए मैं इसे देख लूंगा। क्या प्रोटोकॉल बफर वास्तव में इस तरह की समस्याओं को हल करने के लिए डिज़ाइन किए गए थे या क्या वे इस माध्यमिक उपयोग के लिए बस होते हैं?
जोड़ा लेखक Alex Bausk, स्रोत
जोड़ा लेखक Sorin, स्रोत