WebSocket
Chris Hegarty
chris.hegarty at oracle.com
Tue Feb 20 20:35:29 UTC 2018
Simone,
> On 20 Feb 2018, at 20:19, Simone Bordet <simone.bordet at gmail.com> wrote:
>
> Hi,
>
> On Tue, Feb 20, 2018 at 8:35 PM, Pavel Rappo <pavel.rappo at oracle.com> wrote:
>> If by copies you mean allocating new buffers and feeling them with the same
>> contents, then you are right. No copies are made.
>
> I mean that you call user code with a ByteBuffer produced from a
> slice() of an internal ByteBuffer.
That should be the case.
> The CF mechanism must ensure that the content of the internal
> ByteBuffer is not changed (for example by clearing it and reading from
> the network) before all CFs associated with sliced ByteBuffers
> generated from the internal ByteBuffer are completed.
>
>> However there is a natural need for multiple passes over the buffers, both
>> being sent and received. These are unavoidable transformations performed by SSL
>> and WebSocket masking.
>
> Sure.
>
>> As for the WHOLE message, there's no way an implementation can provide a zero-copy
>> solution.
>
> Leaving SSL aside, I don't see why not ?
Optimistically, if the whole message is read from the underlying
socket in one native read ( small messages ), then the whole
message will be in a single byte buffer, zero copy. If not, then
to re-assemble the whole message into a single byte buffer
will require some copying ( there is no composite byte buffer).
The whole message in the Java EE API is represented by a
single byte buffer. The Java SE API does not suffer this issue.
-Chris.
More information about the net-dev
mailing list