Shared code for websocket servers and clients.
WebsocketException
now extends Amp\ByteStream\StreamException
to avoid violating the ReadableStream
interface by throwing a non-StreamException
from a stream method.Full Changelog: https://github.com/amphp/websocket/compare/v2.0.2...v2.0.3
Rfc7692Compression::fromClientHeader()
now accepts headers including client_max_window_bits
without a value.Stable release compatible with AMPHP v3 and fibers! 🎉
As with other libraries compatible with AMPHP v3, most cases of parameters or returns of Promise<ResolutionType>
have been replaced with ResolutionType
.
Websocket
as a prefix to avoid name collisions with similarly named classes in other packages which are frequently used together. For example, Client
is now WebsocketClient
, Message
is now WebsocketMessage
.WebsocketMessage
(formerly Message
) now implements Stringable
, allowing the object to be simply cast to a string to buffer the contents of a message. Max message limits set on the client will apply.WebsocketException
as base class for WebsocketClosedException
as well as a new exception, WebsocketParserException
.Options
object has been removed. Various configurations options previously available in this class can now be specified by constructor arguments to various factories, such as Rfc6455ParserFactory
in this library or the client factories found in amphp/websocket-server
and amphp/websocket-client
.Compression
sub-namespace.Parser
sub-namespace. This change will allow for greater visibility and logging of activity on a websocket connection.WebsocketHeartbeatQueue
and WebsocketRateLimit
interfaces with implementations PeriodicHeartbeatQueue
and ConstantRateLimit
. These interfaces and implementations offer greater extensibility and fine-tuning of connection behavior, while maintaining easy setup for most applications.ClientMetadata
has been removed in favor of WebsocketCount
and WebsocketTimestamp
enums coupled with methods on a WebsocketClient
, getCount()
and getTimestamp()
, to query for connection info.WebsocketClient::onClose()
is now invoked with two arguments – the Websocket client ID and an instance of WebsocketCloseInfo
providing the close code, reason, time, and whom initiated the close.WebsocketParser
, WebsocketParserFactory
, Rfc6455Parser
, and WebsocketFrameHandler
, splitting the frame parser from Rfc6455Client
WebsocketClient
interface to Rfc5455Client
ClientMetadata::$lastHeartbeatAt
to be set when the pong frame is received rather than when the ping frame is sentInitial release compatible with AMPHP v3.
As with other libraries compatible with AMPHP v3, most cases of parameters or returns of Promise<ResolutionType>
have been replaced with ResolutionType
.
Options
object. Settings that were set using properties on the Options
object are now parameters to client factories in the websocket-client
and websocket-server
libraries or the HeartbeatQueue
and RateLimiter
interfacesHeartbeatQueue
and RateLimiter
interfaces with implementations DefaultHeartbeatQueue
and DefaultRateLimiter
– these objects replace some of the functionality that was only contained within Rfc6455Client
and controlled via Options
Opcode
is now an enum
Websocket
as a prefix to several classes:
Client
renamed to WebsocketClient
ClientMetadata
renamed to WebsocketClientMetadata
Message
renamed to WebsocketMessage
WebsocketClient
now extends Amp\Closable
isConnected()
method replaced with isClosed()
WebsocketClient::receive()
now supports cancellation. Cancelled receives do not discard a message, a subsequent call to receive()
will still return the next message received from the clientWebsocketClient::onClose()
are provided an instance of WebsocketClientMetadata
instead of the client object, close code, and reason. The code and reason are available on the metadata object.GOING_AWAY
to the list of normal close codes, which will cause Client::receive()
to return null instead of throwing an exception if a browser sends this code when navigating away from a page