Package org.apache.pekko.io
Class TcpMessage
- java.lang.Object
-
- org.apache.pekko.io.TcpMessage
-
public class TcpMessage extends java.lang.Object
-
-
Constructor Summary
Constructors Constructor Description TcpMessage()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static Tcp.Commandabort()An abort operation will not flush pending writes and will issue a TCP ABORT command to the O/S kernel which should result in a TCP_RST packet being sent to the peer.static Tcp.Commandbind(ActorRef handler, java.net.InetSocketAddress endpoint, int backlog)Open a listening socket without specifying options.static Tcp.Commandbind(ActorRef handler, java.net.InetSocketAddress endpoint, int backlog, java.lang.Iterable<Inet.SocketOption> options, boolean pullMode)The Bind message is send to the TCP manager actor, which is obtained viaTcpExt.getManager()in order to bind to a listening socket.static Tcp.Commandclose()A normal close operation will first flush pending writes and then close the socket.static Tcp.CommandconfirmedClose()A confirmed close operation will flush pending writes and half-close the connection, waiting for the peer to close the other half.static Tcp.Commandconnect(java.net.InetSocketAddress remoteAddress)Connect to the givenremoteAddresswithout binding to a local address and without specifying options.static Tcp.Commandconnect(java.net.InetSocketAddress remoteAddress, java.net.InetSocketAddress localAddress, java.lang.Iterable<Inet.SocketOption> options, java.time.Duration timeout, boolean pullMode)The Connect message is sent to the TCP manager actor, which is obtained viaTcpExt.getManager().static Tcp.Commandconnect(java.net.InetSocketAddress remoteAddress, java.net.InetSocketAddress localAddress, java.lang.Iterable<Inet.SocketOption> options, scala.concurrent.duration.FiniteDuration timeout, boolean pullMode)The Connect message is sent to the TCP manager actor, which is obtained viaTcpExt.getManager().static Tcp.NoAcknoAck()DefaultTcp.NoAckinstance which is used when no acknowledgment information is explicitly provided.static Tcp.NoAcknoAck(java.lang.Object token)EachTcp.WriteCommandcan optionally request a positive acknowledgment to be sent to the commanding actor.static Tcp.Commandregister(ActorRef handler)The same asregister(handler, false, false).static Tcp.Commandregister(ActorRef handler, boolean keepOpenOnPeerClosed, boolean useResumeWriting)This message must be sent to a TCP connection actor after receiving theTcp.Connectedmessage.static Tcp.CommandresumeAccepting(int batchSize)This message enables the accepting of the next connection if pull reading is enabled for connection actors.static Tcp.CommandresumeReading()This command needs to be sent to the connection actor after aTcp.SuspendReadingcommand in order to resume reading from the socket.static Tcp.CommandresumeWriting()WhenuseResumeWritingis in effect as was indicated in theTcp.Registermessage then this command needs to be sent to the connection actor in order to re-enable writing after aTcp.CommandFailedevent.static Tcp.CommandsuspendReading()Sending this command to the connection actor will disable reading from the TCP socket.static Tcp.Commandunbind()In order to close down a listening socket, send this message to that socket’s actor (that is the actor which previously had sent theTcp.Boundmessage).static Tcp.Commandwrite(ByteString data)The same aswrite(data, noAck()).static Tcp.Commandwrite(ByteString data, Tcp.Event ack)Write data to the TCP connection.static Tcp.CommandwriteFile(java.lang.String filePath, long position, long count, Tcp.Event ack)Writecountbytes starting atpositionfrom file atfilePathto the connection.static Tcp.CommandwritePath(java.nio.file.Path filePath, long position, long count, Tcp.Event ack)Writecountbytes starting atpositionfrom file atfilePathto the connection.
-
-
-
Method Detail
-
connect
public static Tcp.Command connect(java.net.InetSocketAddress remoteAddress, java.net.InetSocketAddress localAddress, java.lang.Iterable<Inet.SocketOption> options, scala.concurrent.duration.FiniteDuration timeout, boolean pullMode)
The Connect message is sent to the TCP manager actor, which is obtained viaTcpExt.getManager(). Either the manager replies with aTcp.CommandFailedor the actor handling the new connection replies with aTcp.Connectedmessage.- Parameters:
remoteAddress- is the address to connect tolocalAddress- optionally specifies a specific address to bind tooptions- Please refer toTcpSOfor a list of all supported options.timeout- is the desired connection timeout,nullmeans "no timeout"pullMode- enables pull based reading from the connection
-
connect
public static Tcp.Command connect(java.net.InetSocketAddress remoteAddress, java.net.InetSocketAddress localAddress, java.lang.Iterable<Inet.SocketOption> options, java.time.Duration timeout, boolean pullMode)
The Connect message is sent to the TCP manager actor, which is obtained viaTcpExt.getManager(). Either the manager replies with aTcp.CommandFailedor the actor handling the new connection replies with aTcp.Connectedmessage.- Parameters:
remoteAddress- is the address to connect tolocalAddress- optionally specifies a specific address to bind tooptions- Please refer toTcpSOfor a list of all supported options.timeout- is the desired connection timeout,nullmeans "no timeout"pullMode- enables pull based reading from the connection
-
connect
public static Tcp.Command connect(java.net.InetSocketAddress remoteAddress)
Connect to the givenremoteAddresswithout binding to a local address and without specifying options.
-
bind
public static Tcp.Command bind(ActorRef handler, java.net.InetSocketAddress endpoint, int backlog, java.lang.Iterable<Inet.SocketOption> options, boolean pullMode)
The Bind message is send to the TCP manager actor, which is obtained viaTcpExt.getManager()in order to bind to a listening socket. The manager replies either with aTcp.CommandFailedor the actor handling the listen socket replies with aTcp.Boundmessage. If the local port is set to 0 in the Bind message, then theTcp.Boundmessage should be inspected to find the actual port which was bound to.- Parameters:
handler- The actor which will receive all incoming connection requests in the form ofTcp.Connectedmessages.endpoint- The socket address to bind to; use port zero for automatic assignment (i.e. an ephemeral port, seeTcp.Bound)backlog- This specifies the number of unaccepted connections the O/S kernel will hold for this port before refusing connections.options- Please refer toTcpSOfor a list of all supported options.pullMode- enables pull based accepting and of connections and pull based reading from the accepted connections.
-
bind
public static Tcp.Command bind(ActorRef handler, java.net.InetSocketAddress endpoint, int backlog)
Open a listening socket without specifying options.
-
register
public static Tcp.Command register(ActorRef handler, boolean keepOpenOnPeerClosed, boolean useResumeWriting)
This message must be sent to a TCP connection actor after receiving theTcp.Connectedmessage. The connection will not read any data from the socket until this message is received, because this message defines the actor which will receive all inbound data.- Parameters:
handler- The actor which will receive all incoming data and which will be informed when the connection is closed.keepOpenOnPeerClosed- If this is set to true then the connection is not automatically closed when the peer closes its half, requiring an explicitTcp.ConnectionClosed from our side when finished.useResumeWriting- If this is set to true then the connection actor will refuse all further writes after issuing aTcp.CommandFailednotification untilTcpResumeWritingis received. This can be used to implement NACK-based write backpressure.
-
register
public static Tcp.Command register(ActorRef handler)
The same asregister(handler, false, false).
-
unbind
public static Tcp.Command unbind()
In order to close down a listening socket, send this message to that socket’s actor (that is the actor which previously had sent theTcp.Boundmessage). The listener socket actor will reply with aTcp.Unboundmessage.
-
close
public static Tcp.Command close()
A normal close operation will first flush pending writes and then close the socket. The sender of this command and the registered handler for incoming data will both be notified once the socket is closed using aTcp.Closedmessage.
-
confirmedClose
public static Tcp.Command confirmedClose()
A confirmed close operation will flush pending writes and half-close the connection, waiting for the peer to close the other half. The sender of this command and the registered handler for incoming data will both be notified once the socket is closed using aTcp.ConfirmedClosedmessage.
-
abort
public static Tcp.Command abort()
An abort operation will not flush pending writes and will issue a TCP ABORT command to the O/S kernel which should result in a TCP_RST packet being sent to the peer. The sender of this command and the registered handler for incoming data will both be notified once the socket is closed using aTcp.Abortedmessage.
-
noAck
public static Tcp.NoAck noAck(java.lang.Object token)
EachTcp.WriteCommandcan optionally request a positive acknowledgment to be sent to the commanding actor. If such notification is not desired theTcp.SimpleWriteCommand.ack()must be set to an instance of this class. The token contained within can be used to recognize which write failed when receiving aTcp.CommandFailedmessage.
-
noAck
public static Tcp.NoAck noAck()
DefaultTcp.NoAckinstance which is used when no acknowledgment information is explicitly provided. Its “token” isnull.
-
write
public static Tcp.Command write(ByteString data, Tcp.Event ack)
Write data to the TCP connection. If no ack is needed use the specialNoAckobject. The connection actor will reply with aTcp.CommandFailedmessage if the write could not be enqueued. IfTcp.SimpleWriteCommand.wantsAck()returns true, the connection actor will reply with the suppliedTcp.SimpleWriteCommand.ack()token once the write has been successfully enqueued to the O/S kernel. Note that this does not in any way guarantee that the data will be or have been sent! Unfortunately there is no way to determine whether a particular write has been sent by the O/S.
-
write
public static Tcp.Command write(ByteString data)
The same aswrite(data, noAck()).
-
writeFile
public static Tcp.Command writeFile(java.lang.String filePath, long position, long count, Tcp.Event ack)
Writecountbytes starting atpositionfrom file atfilePathto the connection. The count must be > 0. The connection actor will reply with aTcp.CommandFailedmessage if the write could not be enqueued. IfTcp.SimpleWriteCommand.wantsAck()returns true, the connection actor will reply with the suppliedTcp.SimpleWriteCommand.ack()token once the write has been successfully enqueued to the O/S kernel. Note that this does not in any way guarantee that the data will be or have been sent! Unfortunately there is no way to determine whether a particular write has been sent by the O/S.
-
writePath
public static Tcp.Command writePath(java.nio.file.Path filePath, long position, long count, Tcp.Event ack)
Writecountbytes starting atpositionfrom file atfilePathto the connection. The count must be > 0. The connection actor will reply with aTcp.CommandFailedmessage if the write could not be enqueued. IfTcp.SimpleWriteCommand.wantsAck()returns true, the connection actor will reply with the suppliedTcp.SimpleWriteCommand.ack()token once the write has been successfully enqueued to the O/S kernel. Note that this does not in any way guarantee that the data will be or have been sent! Unfortunately there is no way to determine whether a particular write has been sent by the O/S.
-
resumeWriting
public static Tcp.Command resumeWriting()
WhenuseResumeWritingis in effect as was indicated in theTcp.Registermessage then this command needs to be sent to the connection actor in order to re-enable writing after aTcp.CommandFailedevent. AllTcp.WriteCommandprocessed by the connection actor between the firstTcp.CommandFailedand subsequent reception of this message will also be rejected withTcp.CommandFailed.
-
suspendReading
public static Tcp.Command suspendReading()
Sending this command to the connection actor will disable reading from the TCP socket. TCP flow-control will then propagate backpressure to the sender side as buffers fill up on either end. To re-enable reading sendTcp.ResumeReading.
-
resumeReading
public static Tcp.Command resumeReading()
This command needs to be sent to the connection actor after aTcp.SuspendReadingcommand in order to resume reading from the socket.
-
resumeAccepting
public static Tcp.Command resumeAccepting(int batchSize)
This message enables the accepting of the next connection if pull reading is enabled for connection actors.- Parameters:
batchSize- The number of connections to accept before waiting for the next resume command
-
-