2014-10-15 2 views
5

Java-WebSocket 라이브러리를 사용하여 webSocket을 사용하여 자바 스크립트 webSocket 클라이언트를 Java webSocketServer (Android 애플리케이션에서)에 연결하고 있습니다. 안드로이드 애플 리케이션은 자바 스크립트 클라이언트에 몇 밀리 초마다 작은 메시지를 보냅니다.WebSocket을 사용하는 Nagle 알고리즘 효과를 피하는 가장 좋은 방법은 무엇입니까?

이 상황에 대한 기본적인 (직관적 인) 접근법을 사용하면 자바 스크립트 클라이언트 내부에서 측정 된 수신 메시지 간의 지연은 다음과 같은 패턴을 나타냅니다. 200ms, 0.1ms, 0.1ms, 0.1ms, 0.1ms , 0.1ms, 0.1ms, 200ms, 0.1ms, 0.1ms, 0.1ms, 0.1ms, 0.1ms, 0.1ms, 200ms, 0.1ms, 0.1ms, 0.1ms, 0.1ms, 0.1ms, 0.1ms ..

이것은 Nagle 알고리즘의 효과로, 기본적으로 설정되어 여러 개의 메시지를 보내기 전에 집계됩니다.

비활성화를 보장 할 방법을 찾지 못했기 때문에 클라이언트에서 서버로 확인 메시지를 보내고 시스템이 제대로 작동하지만 확인 메시지에 no라는 메시지가 있기 때문에 this 이전 질문에서 제안한 방법을 따릅니다. 실제 목적 (해킹이 더 많음), 피해야합니다.

질문은이 문제에 대한 최상의 해결책이되고 있습니까? 응집을 피하는 방법을 알고 있습니까?

감사합니다.

+0

.NET에서 nagle 알고리즘을 비활성화하는 소켓 객체의 설정이 있습니다. 아마도 Java와 비슷한 것이 있습니다. – vtortola

+0

소켓에 쓰기 후에 호출 할 수있는'.flush()'메소드가 있나요? – jfriend00

+1

라이브러리에서 ['setTcpNoDelay()'] (http://docs.oracle.com/javase/7/docs/api/java/net/Socket.html#setTcpNoDelay (boolean))를 사용할 수 있습니까? – jfriend00

답변

0

사용 된 라이브러리에는 flush 또는 setTCPNoDelay 메커니즘이없는 것 같으며 다른 해결책이 제안되지 않았으므로 승인 메시지 솔루션이이 문제에 대한 최선의 해결책으로 유효합니다.

관련 문제