2016-09-23 9 views
0

Jetty 9에서 실행중인 CometD 서버에 큰 메시지 (> 130k)를 보내려고합니다. 서버가이 큰 메시지를 받으면 다음 메시지를 생성합니다 예외 :들어오는 CometD 텍스트 메시지의 최대 크기를 변경하는 방법

org.eclipse.jetty.websocket.api.MessageTooLargeException: Text message size [130353] exceeds maximum size [65536] 
at org.eclipse.jetty.websocket.api.WebSocketPolicy.assertValidTextMessageSize(WebSocketPolicy.java:140) 
at org.eclipse.jetty.websocket.common.Parser.assertSanePayloadLength(Parser.java:127) 
at org.eclipse.jetty.websocket.common.Parser.parseFrame(Parser.java:482) 
at org.eclipse.jetty.websocket.common.Parser.parse(Parser.java:254) 
at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.readParse(AbstractWebSocketConnection.java:632) 
at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.onFillable(AbstractWebSocketConnection.java:480) 
at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544) 
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) 
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) 
at java.lang.Thread.run(Thread.java:745) 
[qtp83954662-20] INFO org.cometd.websocket.server.WebSocketTransport$WebSocketScheduler$1 - WebSocket Error, Address: null 
... 
(the rest removed for brevity) 

본인은 문제가 무엇인지 이해하고 CometD 문서를 검토했습니다. 설명서에 따르면 초기화 매개 변수 ws.bufferSize 및 ws.maxMessageSize를 사용하여 버퍼 크기와 최대 메시지 크기를 변경할 수 있습니다. web.xml 파일에서 이러한 매개 변수를 설정하고 Jetty를 다시 시작했지만 매개 변수 설정이 효과가없는 것으로 보입니다. 버퍼 크기가 변하지 않기 때문에 여전히 똑같은 예외가 발생합니다. 내가 모르는 뭔가가

<servlet> 
    <servlet-name>cometd</servlet-name> 
    <servlet-class>org.cometd.server.CometDServlet</servlet-class> 
    <init-param> 
     <param-name>ws.bufferSize</param-name> 
     <param-value>400000</param-value> 
    </init-param> 
    <init-param> 
     <param-name>ws.maxMessageSize</param-name> 
     <param-value>400000</param-value> 
    </init-param> 
    <async-supported>true</async-supported> 
</servlet> 
<servlet-mapping> 
    <servlet-name>cometd</servlet-name> 
    <url-pattern>/cometd/*</url-pattern> 
</servlet-mapping> 

암 : web.xml 파일에 대한

설정은 아래에 제공됩니다? 어떻게하면 CometD 서버에서 최대 메시지 크기를 설정하고 서버가 실제로 그 메시지 크기를 사용할 수 있습니까?

답변

1

web.xml은 정확하며 문제를 해결하는 올바른 방법입니다.

ws.maxMessageSize 매개 변수가 올바르게 작동하는지 확인하는 테스트가 CometD 테스트 제품군에 있습니다.

필자는 CometD 데모를 수정하고 ws.maxMessageSize을 추가 한 다음 테스트 클라이언트에서 큰 메시지를 보내고 방금 완벽하게 작동했습니다.

아마도 매개 변수 이름에 오타가 있거나 매개 변수를 기본값으로 재설정하는 다른 것이 있습니까?

+0

사실, 오타가 없습니다 (질문과 함께 제공되는 web.xml 파일 참조). 매개 변수가 재설정되는 원인이 있으면 시작 코드 어딘가에 있어야합니다. 어디에서 그런 것을 찾을 수 있을까요? web.xml 파일이 올바른 경우 재설정을 수행 한 원인은 무엇입니까? –

+0

Spring을 사용하여'BayeuxServer' 인스턴스 또는 다른 메커니즘을 생성하고 있습니까? 그러면'web.xml '에 정의 된 설정이 효과가없는 이유가 설명됩니다. – sbordet