2013-07-31 2 views
0

사용자 지정 바이너리 프로토콜 서버를 만드는 가장 좋은 솔루션을 알려주십시오. 서버는 TCP/IP를 통한 바이너리 프로토콜을 통해 여러 장치로부터의 통신을 받아 들여야합니다.맞춤형 바이너리 프로토콜 서버를 만드는 방법은 무엇입니까?

이미 사용할 수있는 기존 서버/프레임 워크 솔루션이 있습니까? 나는. 이 문제를 해결하기에 적합한 node.js입니까? 선호되는 솔루션은 Java 지향입니다.

미리 감사드립니다.

업데이트 : 통신 데이터의 양을 줄이려면 바이너리 프로토콜이 필요합니다. 프로토콜에 대한 모든 텍스트 형식이 너무 길어질 수 있습니다. 또한 장치에 대한 프로토콜이 이미 지정되어 있습니다.

+0

언급 할 항목이 너무 많습니다. 바이너리가되어야하는 이유가 있습니까? 텍스트가 더 쉽게 작업 할 수 있습니까? Java에 내장 된 라이브러리를 사용할 수 있습니다. –

+0

당신은'ServerSocket'을 사용할 수 있습니다 -하지만 이것은 분명히 처음부터 구현할 것을 요구할 것입니다. HTTP를 통해 바이너리 데이터를 보낼 수 없습니까? Base64? –

+0

당신은 텍스트 포맷이 "너무 장황 할 수있다"고 말하지만, 대부분의 시간을 갖는 것이 가장 좋습니다. 텍스트 형식은 바이너리 형식보다 테스트하고 디버그하는 것이 훨씬 쉽고 gzip을 사용하여 텍스트 스트림을 압축하면 많은 오버 헤드가 제거됩니다. 성능 문제가없는 바이너리 형식을 선택하는 것은 일반적으로 조기 최적화입니다. – chrylis

답변

2

나는 얼마 전에 그런 것을 구현했습니다.

  1. java.net 패키지 : java.net.ServerSocket의와 java.net.Socket의 사용자의 요구의 대부분을 충족 할 수 있어야 그 두 가지 표준 자바 API의의를 사용했다.
  2. 패키지 : 새로운 연결마다 ServerSocket 인스턴스에서 소켓이 받아 들여졌습니다.이 소켓을 다른 스레드로 이동하고 ServerSocket.accept() 메소드를 다시 사용하여 다음 연결을 수신하기 시작할 수도 있습니다. 생산자 - 소비자 패턴 구현의 일종. 새 연결을위한 Socket을 대기열에 게시 한 다음 스레드 풀에 공급하는 데 사용되며이 스레드 풀의 각 스레드가 실제 연결 처리를 담당합니다.

참고 : 클라이언트와 서버간에 어떤 유형의 대화 형 패턴 (예 : TCP/IP를 통해 데이터를 처음 전송할 것으로 예상되는지)이 확실하지 않은 경우가 있습니다. 소켓에서 데이터를 읽고 별도의 스레드에서 동일한 소켓에 데이터를 씁니다.

0

기본적인 아이디어는 java.netSocketsServerSockets, 스레드의 조합, 그리고 DataOutputDataInput의 시설을 기반으로 프로토콜 구현 될 것이다.

관련 문제