用 WSTP 进行 Wolfram 系统会话间的通讯
LinkCreate["name"] | 对要连接的另一程序创建一个链接 |
LinkConnect["name"] | 连接到由另一个程序创建的链接上 |
LinkClose[link] | 关闭一个 WSTP 连接 |
LinkWrite[link,expr] | 将一个表达式写入一个 WSTP 连接 |
LinkRead[link] | 从一个 WSTP 连接上读取一个表达式 |
LinkRead[link,Hold] | 读取一个表达式并立即用 Hold 封装 |
LinkReadyQ[link] | 从链接中找出是否有数据可读 |
LinkReadyQ[link,t] | 等待 t 秒后查看是否有表达式可读取 |
LinkReadyQ[{link1,link2,…}] | 从其中一个链接中找出是否有数据可读 |
LinkReadyQ[{link1,link2,…},t] | 等待 t 秒后查看是否有表达式可读取 |
会话 A
会话 B
会话 A
会话 B
会话 A
会话 A
会话 B
从链接中读取表达式,并立即用 Hold 封装:
如果一个链接已经被之前完成的对 LinkWrite、LinkRead 或 LinkActivate 的调用激活,那么表达式就会写入一个缓冲区,而如果缓冲区容得下整个表达式,那么 LinkWrite 会立即返回而不需要对应的 LinkRead. 但当你调用 LinkRead 时,它在从 WSTP 连接中读到完整表达式之前都不会返回.
通过调用 LinkReadyQ[link] 可以知道是否有要读入的内容已准备好. 当 LinkReadyQ 返回 True 时,就可以安全地调用 LinkRead 并可立即开始读入一个表达式. 但如果 LinkReadyQ 返回 False,则在另一个 Wolfram 系统会话中用 LinkWrite 写入一个要读的表达式之前,LinkRead 是阻塞的.
会话 A
在链接中没有要读入的内容在等待,所以如果这时调用 LinkRead,它就会阻塞:
会话 B
会话 A
这时调用 LinkRead 时就不用担心它被阻塞:
LinkReadyQ 可以接受链接对象的列表,并行计算每个链接来决定是否有可以读入的数据. 在单个链接的情况下,第二个变量指明了超时期限,并使 LinkReadyQ 等待直到其中一个链接可以开始使用.
LinkCreate[LinkProtocol->"TCPIP"] | 挑选出计算机上任一个未用端口 |
LinkCreate["number",LinkProtocol->"TCPIP"] | |
使用指定端口 | |
LinkConnect["number",LinkProtocol->"TCPIP"] | |
连接到同一计算机的某个端口 | |
LinkConnect["number@host",LinkProtocol->"TCPIP"] | |
连接到另一计算机的某个端口 |