Using WSTP to Communicate between Wolfram System Sessions
LinkCreate["name"] | create a link for another program to connect to |
LinkConnect["name"] | connect to a link created by another program |
LinkClose[link] | close a WSTP connection |
LinkWrite[link,expr] | write an expression to a WSTP connection |
LinkRead[link] | read an expression from a WSTP connection |
LinkRead[link,Hold] | read an expression and immediately wrap it with Hold |
LinkReadyQ[link] | find out whether there is data ready to be read from a link |
LinkReadyQ[link,t] | wait for up to t seconds to see if an expression becomes ready to read |
LinkReadyQ[{link1,link2,…}] | find out whether there is data ready to be read from one of the links |
LinkReadyQ[{link1,link2,…},t] | wait for up to t seconds to see if an expression becomes ready to read |
Session A
Session B
Session A
Session B
Session A
One use of the Wolfram Symbolic Transfer Protocol (WSTP) connections between Wolfram System sessions is simply as a way to transfer data without using intermediate files.
Session A
Session B
This reads the expression from the link, immediately wrapping it in Hold:
If a link has been activated through completed previous calls to LinkWrite, LinkRead, or LinkActivate, expressions get written to a buffer, and if the whole expression fits in the buffer, LinkWrite immediately returns without need of a corresponding LinkRead. But when you call LinkRead, it will not return until it has read a complete expression from the WSTP connection.
You can tell whether anything is ready to be read by calling LinkReadyQ[link]. If LinkReadyQ returns True, then you can safely call LinkRead and expect immediately to start reading an expression. But if LinkReadyQ returns False, then LinkRead will block until an expression for it to read has been written by a LinkWrite in your other Wolfram System session.
Session A
There is nothing waiting to be read on the link, so if LinkRead were to be called, it would block:
Session B
Session A
LinkRead can thus be called without fear of blocking:
LinkReadyQ can take a list of link objects, evaluating each link in parallel to determine if there is data to read. As in the case of a single link, a second argument specifies a timeout period, causing LinkReadyQ to wait until one of the links is ready to use.
LinkCreate[LinkProtocol->"TCPIP"] | pick any unused port on your computer |
LinkCreate["number",LinkProtocol->"TCPIP"] | |
use a specific port | |
LinkConnect["number",LinkProtocol->"TCPIP"] | |
connect to a port on the same computer | |
LinkConnect["number@host",LinkProtocol->"TCPIP"] | |
connect to a port on another computer |
WSTP can use whatever mechanism for interprogram communication your computer system supports. In setting up connections between concurrent Wolfram System sessions, a common mechanism is internet TCP ports.
Most computer systems have a few thousand possible numbered ports, some of which are typically allocated to standard system services.