The execution context of a {@link io.vertx.core.Handler} execution.
When Vert.x provides an event to a handler or calls the start or stop methods of a \io\vertx\jphp\core\io.vertx.core.Verticle,
the execution is associated with a Context
.
Usually a context is an *event-loop context* and is tied to a specific event loop thread. So executions for that context always occur on that exact same event loop thread.
In the case of worker verticles and running inline blocking code a worker context will be associated with the execution which will use a thread from the worker thread pool.
When a handler is set by a thread associated with a specific context, the Vert.x will guarantee that when that handler is executed, that execution will be associated with the same context.
If a handler is set by a thread not associated with a context (i.e. a non Vert.x thread). Then a new context will be created for that handler.
In other words, a context is propagated.
This means that when a verticle is deployed, any handlers it sets will be associated with the same context - the context of the verticle.
This means (in the case of a standard verticle) that the verticle code will always be executed with the exact same thread, so you don't have to worry about multi-threaded acccess to the verticle state and you can code your application as single threaded.
This class also allows arbitrary data to be @see \io\vertx\jphp\core\Context::put and @see \io\vertx\jphp\core\Context::get on the context so it can be shared easily amongst different handlers of, for example, a verticle instance.
This class also provides @see \io\vertx\jphp\core\Context::runOnContext which allows an action to be executed asynchronously using the same context.
package |
Default |
---|
__construct()
config() : array
array
the configuration of the deployment or null if not a Verticle deployment
deploymentID() : string
string
the deployment ID of the deployment or null if not a Verticle deployment
exceptionHandler( $arg0) : $this
When this handler is called, @see \io\vertx\jphp\core\Vertx::currentContext will return this context.
callable
$this
a reference to this, so the API can be used fluently
executeBlocking( $arg0, $arg1, $arg2 = null) : void
param $blockingCodeHandler [callable] handler representing the blocking code to run param $resultHandler [callable] handler that will be called when the blocking code is complete executeBlocking($blockingCodeHandler, $resultHandler)
Safely execute some blocking code.
Executes the blocking code in the handler blockingCodeHandler
using a thread from the worker pool.
When the code is complete the handler resultHandler
will be called with the result on the original context
(e.g. on the original event loop of the caller).
A Future
instance is passed into blockingCodeHandler
. When the blocking code successfully completes,
the handler should call the @see \io\vertx\jphp\core\Future::complete or @see \io\vertx\jphp\core\Future::complete method, or the @see \io\vertx\jphp\core\Future::fail
method if it failed.
The blocking code should block for a reasonable amount of time (i.e no more than a few seconds). Long blocking operations or polling operations (i.e a thread that spin in a loop polling events in a blocking fashion) are precluded.
When the blocking operation lasts more than the 10 seconds, a message will be printed on the console by the blocked thread checker.
Long blocking operations should use a dedicated thread managed by the application, which can interact with verticles using the event-bus or @see \io\vertx\jphp\core\Context::runOnContext param $blockingCodeHandler [callable] handler representing the blocking code to run param $ordered [boolean] if true then if executeBlocking is called several times on the same context, the executions for that context will be executed serially, not in parallel. if false then they will be no ordering guarantees param $resultHandler [callable] handler that will be called when the blocking code is complete executeBlocking($blockingCodeHandler, $ordered, $resultHandler)
callable
callable | boolean
callable
get( $arg0) : mixed
string
mixed
the data
getInstanceCount() : integer
integer
the number of instances of the verticle that were deployed in the deployment (if any) related to this context
isEventLoopContext() : boolean
boolean
true if false otherwise
isMultiThreadedWorkerContext() : boolean
boolean
true if the current context is a multi-threaded worker context, false otherwise
isOnEventLoopThread() : boolean
boolean
true if current thread is a worker thread, false otherwise
isOnVertxThread() : boolean
boolean
true if current thread is a Vert.x thread, false otherwise
isOnWorkerThread() : boolean
boolean
true if current thread is a worker thread, false otherwise
isWorkerContext() : boolean
boolean
true if the current context is a worker context, false otherwise
owner() : \io\vertx\jphp\core\Vertx
processArgs() : array
array
put( $arg0, $arg1) : void
This can be used to share data between different handlers that share a context
string
mixed
remove( $arg0) : boolean
string
boolean
true if removed successfully, false otherwise
runOnContext( $arg0) : void
callable