Class WsRemoteEndpointImplServer
- java.lang.Object
- 
- org.apache.tomcat.websocket.WsRemoteEndpointImplBase
- 
- org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer
 
 
- 
- All Implemented Interfaces:
- RemoteEndpoint
 
 public class WsRemoteEndpointImplServer extends WsRemoteEndpointImplBase This is the server sideRemoteEndpointimplementation - i.e. what the server uses to send data to the client.
- 
- 
Nested Class Summary- 
Nested classes/interfaces inherited from interface javax.websocket.RemoteEndpointRemoteEndpoint.Async, RemoteEndpoint.Basic
 
- 
 - 
Field Summary- 
Fields inherited from class org.apache.tomcat.websocket.WsRemoteEndpointImplBasemessagePartInProgress, SENDRESULT_OK
 
- 
 - 
Constructor SummaryConstructors Constructor Description WsRemoteEndpointImplServer(SocketWrapperBase<?> socketWrapper, UpgradeInfo upgradeInfo, WsServerContainer serverContainer, WebConnection connection)
 - 
Method SummaryAll Methods Instance Methods Concrete Methods Modifier and Type Method Description protected booleanacquireMessagePartInProgressSemaphore(byte opCode, long timeoutExpiry)Acquire the semaphore that allows a message part to be written.protected voiddoClose()protected voiddoWrite(SendHandler handler, long blockingWriteTimeoutExpiry, java.nio.ByteBuffer... buffers)protected java.util.concurrent.locks.LockgetLock()protected longgetTimeoutExpiry()protected 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 Detail- 
WsRemoteEndpointImplServerpublic WsRemoteEndpointImplServer(SocketWrapperBase<?> socketWrapper, UpgradeInfo upgradeInfo, WsServerContainer serverContainer, WebConnection connection) 
 
- 
 - 
Method Detail- 
isMaskedprotected final boolean isMasked() - Specified by:
- isMaskedin class- WsRemoteEndpointImplBase
 
 - 
acquireMessagePartInProgressSemaphoreprotected boolean acquireMessagePartInProgressSemaphore(byte opCode, long timeoutExpiry) throws java.lang.InterruptedExceptionAcquire 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:
- java.lang.InterruptedException- If the wait for the semaphore is interrupted
 
 - 
doWriteprotected void doWrite(SendHandler handler, long blockingWriteTimeoutExpiry, java.nio.ByteBuffer... buffers) - 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) 
 - 
setTransformationprotected void setTransformation(Transformation transformation) - Overrides:
- setTransformationin class- WsRemoteEndpointImplBase
 
 - 
getLockprotected java.util.concurrent.locks.Lock getLock() - Specified by:
- getLockin class- WsRemoteEndpointImplBase
 
 
- 
 
-