Class WsRemoteEndpointImplServer
java.lang.Object
org.apache.tomcat.websocket.WsRemoteEndpointImplBase
org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer
- All Implemented Interfaces:
- RemoteEndpoint
This is the server side 
RemoteEndpoint implementation - i.e. what the server uses to send
 data to the client.- 
Nested Class SummaryNested classes/interfaces inherited from interface jakarta.websocket.RemoteEndpointRemoteEndpoint.Async, RemoteEndpoint.Basic
- 
Field SummaryFields inherited from class org.apache.tomcat.websocket.WsRemoteEndpointImplBasemessagePartInProgress, SENDRESULT_OK
- 
Constructor SummaryConstructorsConstructorDescriptionWsRemoteEndpointImplServer(SocketWrapperBase<?> socketWrapper, UpgradeInfo upgradeInfo, WsServerContainer serverContainer, WebConnection connection) 
- 
Method SummaryModifier and TypeMethodDescriptionprotected booleanacquireMessagePartInProgressSemaphore(byte opCode, long timeoutExpiry) Acquire the semaphore that allows a message part to be written.protected voiddoClose()protected voiddoWrite(SendHandler handler, long blockingWriteTimeoutExpiry, ByteBuffer... buffers) protected LockgetLock()protected longprotected final booleanisMasked()protected voidonTimeout(boolean useDispatch) voidonWritePossible(boolean useDispatch) protected voidsetTransformation(Transformation transformation) protected voidupdateStats(long payloadLength) Hook for updating server side statistics.Methods inherited from class org.apache.tomcat.websocket.WsRemoteEndpointImplBaseclose, flushBatch, getBatchingAllowed, getSendStream, getSendTimeout, getSendWriter, sendBytes, sendBytesByCompletion, sendBytesByFuture, sendObject, sendObjectByCompletion, sendObjectByFuture, sendPartialBytes, sendPartialString, sendPing, sendPong, sendString, sendStringByCompletion, sendStringByFuture, setBatchingAllowed, setEncoders, setSendTimeout, setSession
- 
Constructor Details- 
WsRemoteEndpointImplServerpublic WsRemoteEndpointImplServer(SocketWrapperBase<?> socketWrapper, UpgradeInfo upgradeInfo, WsServerContainer serverContainer, WebConnection connection) 
 
- 
- 
Method Details- 
isMaskedprotected final boolean isMasked()- Specified by:
- isMaskedin class- WsRemoteEndpointImplBase
 
- 
acquireMessagePartInProgressSemaphoreprotected boolean acquireMessagePartInProgressSemaphore(byte opCode, long timeoutExpiry) throws InterruptedException Acquire the semaphore that allows a message part to be written.The close message is a special case. It needs to be blocking else implementing the clean-up that follows the sending of the close message gets a lot more complicated. On the server, this creates additional complications as a dead-lock may occur in the following scenario: - Application thread writes message using non-blocking
- Write does not complete (write logic holds message pending lock)
- Socket is added to poller (or equivalent) for write
- Client sends close message
- Container processes received close message and tries to send close message in response
- Container holds socket lock and is blocked waiting for message pending lock
- Poller fires write possible event for socket
- Container tries to process write possible event but is blocked waiting for socket lock
- Processing of the WebSocket connection is dead-locked until the original message write times out
 true) and upgrade processors are never pooled.TODO: Despite the complications it creates, it would be worth exploring the possibility of processing a received close frame in a non-blocking manner. - Overrides:
- acquireMessagePartInProgressSemaphorein class- WsRemoteEndpointImplBase
- Parameters:
- opCode- The OPCODE for the message to be written
- timeoutExpiry- The time when the attempt to acquire the semaphore should expire
- Returns:
- trueif the semaphore is obtained, otherwise- false.
- Throws:
- InterruptedException- If the wait for the semaphore is interrupted
 
- 
doWrite- Specified by:
- doWritein class- WsRemoteEndpointImplBase
 
- 
updateStatsprotected void updateStats(long payloadLength) Description copied from class:WsRemoteEndpointImplBaseHook for updating server side statistics. Called on every frame written (including when batching is enabled and the frames are buffered locally until the buffer is full or is flushed).- Overrides:
- updateStatsin class- WsRemoteEndpointImplBase
- Parameters:
- payloadLength- Size of message payload
 
- 
onWritePossiblepublic void onWritePossible(boolean useDispatch) 
- 
doCloseprotected void doClose()- Specified by:
- doClosein class- WsRemoteEndpointImplBase
 
- 
getTimeoutExpiryprotected long getTimeoutExpiry()
- 
onTimeoutprotected void onTimeout(boolean useDispatch) 
- 
setTransformation- Overrides:
- setTransformationin class- WsRemoteEndpointImplBase
 
- 
getLock- Specified by:
- getLockin class- WsRemoteEndpointImplBase
 
 
-