2011-09-03 18 views
5

मैं जावा या पायथन में एक आरपीसी लाइब्रेरी की तलाश में हूं (पायथन पसंदीदा है) जो टीसीपी का उपयोग करता है। यह समर्थन करना चाहिए:असिंक्रोनस बिडरेक्शनल आरपीसी

  • अतुल्यकालिक
  • द्वि-दिशा
  • आरपीसी
  • कुछ घटना पाश की तरह

किसी भी सिफारिशों (कॉलबैक या इसी तरह के साथ)? मैंने bjsonrpc जैसी चीजों को देखा है जो कि सही प्रकार की चीज लगती थी, हालांकि सर्वर के लिए कौन से कनेक्शन की पहचान करना संभव नहीं था; इसलिए यदि किसी उपयोगकर्ता ने स्वयं को पहचान लिया है और उस उपयोगकर्ता को एक संदेश भेजने के लिए किसी अन्य उपयोगकर्ता से अनुरोध आता है तो वह उस उपयोगकर्ता कनेक्शन का पर्दाफाश नहीं करता है ताकि हम संदेश भेज सकें।

उत्तर

6

आप निश्चित रूप से Twisted की जांच करनी चाहिए। यह एक घटना के आधार पर पायथन नेटवर्किंग ढांचे एक घटना पाश के एक कार्यान्वयन ("रिएक्टर" कहा जाता है) का चयन करें, चुनाव, epoll, kqueue और I/O पूर्णता बंदरगाहों का समर्थन किया है कि है, और वस्तुओं Deferreds

कहा जाता है के साथ अतुल्यकालिक कॉल मध्यस्थता करता है आपकी आरपीसी आवश्यकता के लिए, शायद आपको ट्विस्टेड PB लाइब्रेरी या AMP देखें।

2

मैं पूरी तरह यकीन है कि क्या आप "घटना पाश" द्वारा א टी मतलब यह नहीं हूँ, लेकिन आप RPyC (अजगर) की जांच करनी चाहिए

RPyC Project page

1

मैं bjsonrpc का लेखक हूं। मुझे यकीन है कि आप जो करना चाहते हैं उसे करना संभव है।

कुछ चीजें शायद खराब दस्तावेज हैं या शायद कुछ उदाहरणों की आवश्यकता है।

लेकिन, संक्षेप में, हैंडलर आंतरिक राज्यों (जैसे प्रमाणीकृत या नहीं, या शायद उपयोगकर्ता नाम) स्टोर कर सकते हैं। किसी भी हैंडलर से आप "कनेक्शन" कक्षा तक पहुंच सकते हैं, जिसमें सॉकेट स्वयं होता है।

ऐसा लगता है कि आप एक उदाहरण के रूप में चैट की तरह कुछ चाहते हैं। मैंने अतीत में कुछ ऐसा किया था। मैं एक नई रिलीज के लिए चैट उदाहरण जोड़ने की कोशिश करूंगा।

आंतरिक राज्यों यहां समझाए गए हैं: http://packages.python.org/bjsonrpc/tutorial1/index.html#stateful-server

वे प्रमाणीकरण के लिए इस्तेमाल किया जाना चाहिए (लेकिन कोई मानक प्रमाणन विधि अभी तक प्रदान की जाती है)।

हैंडलर से कनेक्शन क्लास तक कैसे पहुंचे, यह अभी तक दस्तावेज नहीं है (क्षमा करें), लेकिन कभी-कभी स्रोत कोड के अंदर उदाहरणों में इसका उपयोग किया जाता है। उदाहरण के लिए, example1-server.py इस सार्वजनिक समारोह में शामिल है:

def gettotal(self): 
    self._conn.notify.notify("total") 
    return self.value_total 

BaseHandler._conn है कि उपयोगकर्ता के लिए कनेक्शन का प्रतिनिधित्व करता है।

conn = bjsonrpc.connect(host=host,port=port,handler_factory=MyHandler) 

तो, आप एक वैश्विक चर में लॉग इन उपयोगकर्ताओं के लिए कनेक्शन स्टोर कर सकते हैं, और बाद में किसी भी ग्राहक विधि आप करना चाहते हैं फोन: और वास्तव में एक ही कक्षा जब आप कनेक्ट हो जाता है।

+0

क्या यह क्लाइंट पुश पर सर्वर कर सकता है, यदि हां, तो क्या वहां कोई उदाहरण है? –

1

मैं Versile Python (VPy) विकसित करने में शामिल हूं जो आप जिन क्षमताओं का अनुरोध कर रहे हैं उन्हें प्रदान करता है।यह वर्तमान में मुख्य रूप से परीक्षण के लिए लक्षित विकास रिलीज के रूप में उपलब्ध है, हालांकि आप इसे देखना चाहते हैं।

उपयोगकर्ताओं की पहचान के संबंध में आप एक संदर्भ ऑब्जेक्ट प्राप्त करने के लिए दूरस्थ विधियों को कॉन्फ़िगर कर सकते हैं जो विधि को इस ड्राफ़्ट कोड के समान वाक्यविन्यास का उपयोग करके प्रमाणीकृत उपयोगकर्ता के बारे में जानकारी प्राप्त करने में सक्षम बनाता है।

from versile.quick import * 

@doc 
class MessageBox(VExternal): 
    """Dispatches IM messages.""" 
    @publish(show=True, doc=True, ctx=True) 
    def send_message(self, msg, ctx=None): 
     """Sends a message to the message box""" 
     if ctx.identity is None: 
      raise VException('No authenticated user') 
     else: 
      # do something ... 
      pass 
संबंधित मुद्दे