Hi Mark,

On Thu, Nov 21, 2013 at 2:23 PM, Mark Thomas <ma...@apache.org> wrote:

> On 21/11/2013 11:57, Johan Compagner wrote:
>
> > But the thing is, it is purely tomcat making frames/fragmentation.
> > The browser (chrome in my part) sends over just 1 frame (14K or what ever
> > size i have now already test that send over 50K of data in 1 frame, no
> idea
> > what exactly the frame buffer size is of chrome, i haven't hit that one
> yet)
> > but tomcat internally divides it up in 8K and then suddenly it is
> "framed"
> > but over the line from the browser to the server it where not frames it
> was
> > just one.
> >
> > i am currently reading also this
> >
> >
> http://download.oracle.com/otn-pub/jcp/websocket-1_0-fr-spec/JavaWebSocketAPI_1.0_Final.pdf
> >
> > and nowhere i can find (4.7 for example) that a whole message can only
> by 1
> > frame..
> > They even have a standard limit see 4.7.1 where maxMessageSize is
> defined,
> > that is default -1 and that means that it can be unlimited.(but that's
> not
> > true in tomcat it is limited by the input buffer size)
>
> Yes, Tomcat changes the default maximum message size from infinite to
> 8k. The reason for that should be blindingly obvious - DoS protection.
>
> Tomcat similarly imposes limits on HTTP requests (header size, header
> number, etc.) that are not part of the HTTP specification. While it
> could be argued that Tomcat is breaking the HTTP specification by
> imposing these limits, the limits are here to stay.
>
> > I am still thinking that tomcat implementation interprets it wrong. A
> whole
> > message is really what it is, the complete message, constructed out of X
> > number of frames.
>
> Correct. And the WebSocket specification no limits on message size. A
> single frame may be up to 2^63-1 and a message may consist of an
> unlimited number of frames. Do you really think it is sensible for any
> implementation to allow that much data to be buffered by default?
>
> > So tomcat should handle the concatting for me, why do i need to do that
> my
> > self?
>
> You don't.
>
> If you want the container to provide the received message in a single
> call then all you need to do is tell the container what the maximum
> message size you wish it to support is. The Java WebSocket 1.0 (JSR356)
> API provides a mechanism for doing this via
> Session.setMaxTextMessageBufferSize() and
> Session.setMaxBinaryMessageBufferSize()
>
> Tomcat provides a container specific way of setting the default limits
> but you can use the JSP356 API to set the limits you want in a container
> neutral manner that will be portable across implementations.
>
> > Only if i specify that i want to have partial messages (the boolean arg)
> > then i get the frames or better said the buffer sizes of tomcat.
>
> There is explicitly no relationship between a WebSocket frame and a
> partial WebSocket message delivered via
> MessageHandler.Partial.onMessage(String, boolean). Containers are free
> to call that method with any length String they like as long as it is >0
> and less than the maximum message size.
>

Hence there is no relation between the fragmentation support in the
protocol and JSR 356 APIs. Is that correct?


> Mark
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
>
>

Reply via email to