2011-09-03 4 views
5

TCP를 사용하는 Java 또는 Python (파이썬이 선호 됨)으로 RPC 라이브러리를 찾고 있습니다. 그것은 지원한다 : 이벤트 루프의비동기 양방향 RPC

  • 비동기
  • 양방향
  • RPC
  • 어떤 종류의

모든 권고 (콜백 또는 유사한으로)? 나는 bjsonrpc와 같은 것을 보았다. 그러나 그것은 서버가 어떤 연결을 식별 할 수없는 것처럼 보였다. 그래서 사용자가 자신을 식별하고 다른 사용자로부터 요청이 들어와 해당 사용자에게 메시지를 보내면 사용자 연결이 노출되지 않으므로 메시지를 보낼 수 있습니다.

답변

6

을 확인해야 RPyC (파이썬)를 확인해야한다. 이 모듈은 select, poll, epoll, kqueue 및 I/O 완료 포트를 지원하는 이벤트 루프 ("reactor"라고 함) 구현을 포함하고 Deferreds

과 같은 객체를 사용하여 비동기 호출을 중재하는 이벤트 기반 Python 네트워킹 프레임 워크입니다. RPC 요구 사항에 대해서는 아마도 Twisted의 PB 라이브러리 또는 AMP 라이브러리를 확인해야합니다.

1

저는 bjsonrpc의 저자입니다. 나는 네가 원하는대로 할 수 있다고 확신한다.

일부 내용이 제대로 문서화되지 않았거나 일부 예가 필요할 수 있습니다.

그러나 간단히 말해서 처리기는 내부 상태 (인증 여부 또는 사용자 이름 등)를 저장할 수 있습니다. 모든 핸들러에서 소켓 자체가있는 "Connection"클래스에 액세스 할 수 있습니다.

예를 들어 채팅과 같은 것을 원한다고 생각됩니다. 나는 과거에 비슷한 것을했다. 새 릴리스에 대한 채팅 예제를 추가하려고합니다. 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

내가 요청한 기능을 제공하는 (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