2010-08-05 4 views
5

우리가 할 수있는 프로토콜을 필요로하는 :/로그 아웃팁은 내가 일을

  • 사용자 로그인
  • 보내기/받아 봐 파일
  • 보내기/받아 봐 지침
  • 보내기/받아 봐 오디오 스트림 (RTP를 사용할 수 있습니다)
  • 보내기/받아 봐 작은 XML 파일은 모든 사람들을위한
  • 암호화를 사용합니다.

Java로 구현됩니다. 그래서 나는 아직 네트워크 프로토콜을 구현하지 않았기 때문에 몇 가지 질문을한다.

  1. 기존 프로토콜을 사용하여 빌드 할 수 있습니까?
  2. 프로토콜을 디자인하는 데 어떤 도구를 사용할 수 있습니까? "Modeling"에 대해
  3. 이 모든 것을 성취 할 수 있습니까? 나는 내가 필요한만큼 시간을 가진다.

저는 자바와 C++에서 꽤 좋은 배경을 가지고 있지만, 아직 소켓/네트워킹 프로그래밍에서는 그렇지 않습니다.

감사합니다.

답변

2

SIP (패킷 처리가 주로 상태 비 저장이고 XML이3k 패킷으로 충분할 정도로 작 으면) 또는 XMPP 중 하나를 재발견하려는 느낌이 들었습니다.

연결 지향 로그인/로그 아웃 및 상태 저장 명령/지침이 필요한 경우 XMPP가 요구 사항에 더 가깝습니다. 또한 Jingle extension to XMPP는 이미 RTP 설정 및 해체를 처리합니다. XML 메시지는 사용자 정의 XMPP 패킷 (XML 자체)에 포함하기 쉽고 파일 전송을 프록 싱하는 XMPP 솔루션이 있습니다.

나는 꽤 잘 당신의 요구 사항을 충족 확신합니다 (적어도 여기에 제시된 방식). 완전히 새로운 프로토콜을 설계 할 필요가 없다면 그렇게하지 않는 것이 더 쉽습니다. 또한 기존 XMPP 서버를 재사용하면 자신 만의 메시지 브로커를 만드는 데 따르는 고통을 해결할 수 있습니다. Java로 작성된 OpenFire 서버가 있습니다.

+0

대단히 감사합니다 ... 징글과 XMPP를 확인합니다. – fredcrs

+0

Smack을 사용할 수있는 것처럼 보입니다. 내 고객을 만들기 위해서 ... 그리고 나는 openfire를 서버로 사용해야한다. 하지만 Smack 지원 스트리밍이 성공하지 못한다면 나는 그다지 잘 모릅니다. 이것이 최선의 방법일까요? – fredcrs

+0

오디오 스트리밍 미안 해요. – fredcrs

0

http 또는 https를 사용할 수 있습니다. 자바 미디어 프레임 워크는 rtp의 구현을 포함합니다.

+0

http/s는 대용량 파일/오디오 등을 보내는 데 지독합니다. 또한 stateless이므로 로그인 정보를 만드는 것이 더 어려울 수 있습니다. –

3

Java 메시지 클래스 자동 생성은 물론 컴팩트 와이어 프로토콜을 생성하는 Google Protocol Buffers을 살펴보십시오. Java NIO ByteBuffer을 사용하여 내 자신의 메시지 코덱을 롤링하기 전에 들어 봤으면 좋겠다.

+0

+1, 그것은 내가 전에 들어 본 적이없는 정말 흥미로운 프로젝트였습니다. 몇 년 전 bytebuffers로 전체 메시지 코덱을 굴려 보았습니다. (그리고 때로는 짜증이났습니다.) 이런 식으로 뭔가를하면 개발 시간을 크게 줄일 수있었습니다 (하지만이게 효과가있었습니다!). 나는 여유 시간을 가질 때 이것에 대해 확실히 살펴볼 것입니다. 내 현재의 직업 (C#과 WCF ...)에서는 그다지 쓸모가 없다. – wasatz

+2

이름에 "프로토콜"이 있어도 메시지를 이진 형식으로 직렬화하는 방법 일뿐입니다. 이것은 자신의 메시지 교환을 설계하는 데있어 하나의 작은 단계에 불과합니다. 상태, 오류 복구, 잠재적 인 충돌/메시지 경합 등을 다루는 것에 대해 생각할 필요가 있습니다. – viraptor

0

프로토콜을 처음부터 작성하려면 많은 작업이 필요할 수 있습니다. XMPP를 살펴보십시오.

자신 만의 프로토콜을 작성하려면 JSON 또는 이와 유사한 RPC 형식을 배우는 것으로 시작하십시오. 이렇게하면 삶이 훨씬 쉬워집니다.

1

이것이 나쁜 조언인지는 모르겠지만 네트워킹 응용 프로그램에서 일반적으로하는 일은 TAG 문자열과 CONTENT 문자열을 포함하는 Message 개체를 만드는 것입니다. CONTENT 부분은 대개 JSON 문자열이며 메시지 자체는 json 문자열로 서버로 보내거나 서버에서 전송됩니다.

서버 또는 클라이언트가 메시지를 받으면 json을 Message 개체로 구문 분석합니다. 그런 다음 메시지의 TAG 부분을 확인하여 메시지의 CONTENT 부분에 어떤 유형의 콘텐츠가 포함되어 있는지보고 그 메시지의 처리 방법을 결정할 수 있습니다.

예를 들어, TAG == "LOGIN"이면 CONTENT가 로그인 정보 또는 유사 할 수 있습니다. 그리고 TAG == "MESSAGE"일 때 CONTENT는 매개 변수를 나타내는 json 문자열 (예 :받는 사람이 누구인지, 메시지의 내용은 무엇입니까?)이 될 수 있습니다.

다음 작업을 수행 할 수 있습니다. 문자열에 대한 암호화 및 암호 해독. 이 일을 바보 같은 방법이 있다면, 그래서 내가 배울 수있는 의견을 내게 말해주세요 :)

나는 또한 일반적으로 양쪽에 상태 디자인 패턴을 구현하지만 적어도 서버 쪽. 예를 들어, 서버는 WaitingForLogin 상태에서 시작합니다. 클라이언트가 로그인하면 파일 및 채팅 메시지를 수신하는 다른 상태로 전환됩니다. 이렇게하면 관리하기가 더 쉽다는 것을 알게되었습니다.

+0

접근 방식을 공유해 주셔서 감사합니다. 그것은 내가 올바른 방향으로 가고 있음을 알렸다. –

관련 문제