2017-03-27 3 views
1

소켓 채널에 쓰기 위해 자바 핸들러와 함께 Java nio AsynchronousServerSocketChannel을 사용하고 있습니다.자바 소켓을 사용하여 엄청난 양의 데이터 전송하기

소켓은 동일한 시스템에서 실행중인 두 프로세스간에 로컬로 통신하는 데 사용됩니다.

꽤 큰 데이터를 전송하는 경향이 있습니다. 버퍼 크기 16384를 사용하여 데이터를 청크 방식으로 전송합니다. UDP를 통한 전송은 옵션이 아닙니다.

소켓 채널의 성능을 향상 시키거나 전송 된 페이로드를 줄이기 위해 수행 할 수있는 다른 작업이 있습니까?

최고 감사합니다, 당신이 고려할 수 있습니다 대안의 숫자가 있습니다

+0

지퍼로 처리 할 수 ​​있습니다. 크기를 줄일 수는 있지만 전반적인 성능에 대해서는 확신 할 수 없습니다. –

+0

일부 압축 기술을 사용할 수 있습니다. – opensam

+0

훨씬 큰 버퍼를 사용하고 청크 방식으로 전송하지 마십시오. 가능한 한 TCP 스트림을 보냅니다. 대형 소켓 송수신 버퍼를 사용하십시오. TCP를 밖으로 생각하려고하지 마십시오. 너는하지 않을 것이다. – EJP

답변

0

Saurav. 올바른 하드웨어를 선택하려면 하드웨어를 구현하고 애플리케이션의 실제 성능을 테스트해야합니다.

  1. 현재 접근 방식을 조정할 수 있습니다. 몇 가지 생각 : 훨씬 더 큰 버퍼, 두 개의 버퍼 (작성자가 항상 쓰기 용 소켓을 가지고 있고 판독기는 항상 읽을 수 있도록 두 개의 소켓 사용), 차이점 만 보내고 (데이터를 지속적으로 보내고 업데이트하는 경우), 압축 등
  2. 공유 메모리 또는 메모리 매핑 파일과 같은 완전히 다른 방법을 사용하십시오. 좋은 답변을 많이 드리는 몇 가지 질문이 있습니다. thisthat입니다.

세부 정보는 특정 환경에 따라 다르지만 현재 소켓 구현에 비해 통신 속도를 10 배 (또는 그보다 훨씬 더 높일 수 있습니다.

+0

답장을 보내 주셔서 감사합니다 Rob ... 나는 메모리 매핑 된 파일 개념이 마음에 들었지만 자바 API는 비 지속 메모리 매핑 파일을 지원합니다. 여기에 질문을했습니다. http://stackoverflow.com/questions/43190764/support -for-non-persisted-memorymappedfile – saurav

관련 문제