WebSocket说明
# TaskRunner WebSocket说明
TaskRunner 包含 WebSocket 客户端与 WebSocket 服务器,可与 FastWeb 的 WebSocket 服务器或者TaskRunner 自带的WebSocket 服务器连接,其他客户端可发送 WebSocket 消息实现远程执行 TaskRunner 功能。如需要了解 FastWeb 中 WebSocket的通讯方式请参考 Bean通讯。
# 1. 设置
使用 WebSocket 服务的功能前,请先检查 TaskRunner 中 WebSocket 设置是否正确。如设置正确,TaskRunner 运行后日志中显示 WebSocket客户端连接成功
。
TaskRunner自带的WebSocket服务器的地址与HTTP服务地址一致,端口号也与HTTP服务的端口号一致。默认为 8080
,默认的WS路径使用 /message
。
使用websocket路径的格式如下:
ws://localhost:8080/message
如果服务端启用了SSL,假设示例端口为 8443
,默认的WS路径使用 /message
,则相应的路径格式如下:
wss://localhost:8443/message
如果启用了身份认证,则 WS 路径如下:
ws://localhost:8080/sgc/auth/url/{USERNAME}/{PASSWORD}
其中 {USERNAME}
与 {PASSWORD}
处分别修改为对应连接使用的用户名与密码。
# 2. 运用
TaskRunner 的任务执行需配合 FastWeb 或者通用WebSocket客户端使用。
# 2.1. 注册会话
连接至WebSocket服务器后,需注册会话才可使用TaskRunner的WebSocket功能。注册会话的格式如下:
{"action":"login","sid":"test"}
向WebSocket服务器发送上述指令后,客户端会话注册完成,使用的WS会话ID为 test
。
# 2.2. 发送字符串消息
向其它连接的客户端发送字符串消息,使用以下格式进行发送。
{"action":"msg","sid":"{SID}","text":"{TEXT}"}
{SID}
为目标客户端的注册会话ID,{TEXT}
为发送的文本信息。
# 2.3. Cmd 批处理
以下是通过直接执行的方式运行批处理的示例。可调用批处理语句执行程序重启。
{"action":"script","syntaxtype":"cmd","script":"taskkill /im TARS.exe /f & ping 127.0.0.1 -n 1 & start \"\" \"C:\\Program Files\\IsoFace\\TARS\\TARS.exe\" "}
除上述方式外,也支持直接执行自定程序列表中批处理类型的自定程序。在自定程序列表中创建 tars
的Cmd
类型自定程序,设计程序内容如下。
echo
:结束进程
taskkill /im TARS.exe /f
:执行下一步骤前等待1秒
ping 127.0.0.1 -n 1
start "" "C:\Program Files\IsoFace\TARS\TARS.exe"
echo
2
3
4
5
6
7
在任一已连接的WebSocket客户端中发送以下格式的信息,可执行上述批处理程序。
{"action":"script","taskname":"tars"}
# 2.4. PowerShell 批处理
以下是通过直接执行的方式运行批处理的示例。可调用批处理语句执行程序重启。
{"action":"script","syntaxtype":"powershell","script":"$directory = \"E:\\setup\";$filename = \"test.txt\";$content = \"hello world\";$filePath = Join-Path -Path $directory -ChildPath $filename;if (-not (Test-Path -Path $directory)) {New-Item -ItemType Directory -Path $directory};Set-Content -Path $filePath -Value $content;Write-Output \"file created:$filePath\";"}
除上述方式外,也支持直接执行自定程序列表中批处理类型的自定程序。在自定程序列表中创建 ps_test
的PowerShell
类型自定程序,设计程序内容如下。
# 指定目录位置
$directory = "E:\setup"
# 指定文件名
$filename = "test.txt"
# 指定文件内容
$content = "hello world"
# 创建完整的文件路径
$filePath = Join-Path -Path $directory -ChildPath $filename
# 创建目录(如果不存在)
if (-not (Test-Path -Path $directory)) {
New-Item -ItemType Directory -Path $directory
}
# 创建并写入文件内容
Set-Content -Path $filePath -Value $content
# 输出文件创建成功消息
Write-Output "file created:$filePath"
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
在任一已连接的WebSocket客户端中发送以下格式的信息,可执行上述批处理程序。
{"action":"script","taskname":"ps_test"}
# 2.5. JScript/PascalScript 任务
TaskRunner 通过 WebSocket 消息呼叫可实现 JScript/PascalScript 的执行。
{"action":"script","syntaxtype":"jscript","script":"{DoOpenBrowser(\"chrome.exe\",\"--kiosk https://www.isoface.cn \",0);}"}
除上述方式外,也支持执行自定程序列表中类型为 JScript
的自定程序。创建一个名为 browser
,类型为JScript
自定程序,内容如下。
//调用Chrome浏览器打开https://www.isoface.cn/网页
{
DoOpenBrowser("chrome.exe","--kiosk https://www.isoface.cn",0);
}
2
3
4
在任一已注册会话ID的WebSocket客户端中发送以下格式的信息,可执行上述JScript程序。
{"action":"script","taskname":"browser"}
如果需要在JS程序中引入参数信息,则 JScript
自定程序可改写如下,将需要参数化的变量取值替换为 UgParams.Values["param_name"]
:
{
DoOpenBrowser("chrome.exe","--kiosk " + UgParams.Values["url"],0);
}
2
3
如程序与参数直接通过json传入,直接调用的用法如下:
{
"action": "script",
"syntaxtype": "jscript",
"script": "{DoOpenBrowser(\"chrome.exe\",\"--kiosk \" + UgParams.Values[\"url\"],0);}",
"params":[{"name":"url","value":"https://www.isoface.cn"}]
}
2
3
4
5
6
如在自定程序中设置了参数,在任一已注册会话ID的WebSocket客户端中,发送以下格式的信息,可执行上述JScript程序。
{"action":"script","taskname":"browser","params":[{"name":"url","value":"https://www.isoface.cn"}]}
使用参数的json新增了 params
队列,可在其中根据参数需要修改取值。
{
"action": "script",
"taksname": "task_name",
"params": [
{
"name": "param_name1",
"value": "param_value1"
},
{
"name": "param_name2",
"value": "param_value2"
},
...
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 2.6. 运行工作流
使用websocket客户端发送以下格式的信息,以执行工作流。
{"action":"workflow","name":"test_wf"}
如果需要从呼叫中获取参数作为工作流的变量取值使用,则发送的格式如下:
{"action":"workflow","name":"test_wf","params":[{"name":"Var1","value":"111"}]}
# 2.7. 在JS程序中使用WebSocket
如需要在JS自定程序中使用WebSocket功能,可参考自定函数与自定程序中的函数、程序说明使用。
- WSClient_WriteStream:客户端发送流消息。
- WSClient_WriteString:客户端发送字符串消息。
- WSClient_WriteIsoBean:客户端发送 IsoBean 关联的字符串信息。
- WSServer_BroadcastString:服务端发送字符串广播消息。
- WSServer_BroadcastStream:服务端发送流广播消息。
- WSServer_WriteStream:服务端发送流消息。
- WSServer_WriteString:服务端发送字符串消息。
- GetWebSocketGUID:根据会话ID获取WebSocket连接的GUID。
# 2.8. 执行数据库查询(SQL)
在 TaskRunner 中设置了数据库连接与SQL预设资料 后,可利用 TaskRunner 来执行 SQL 查询。发送的格式内容如下:
直接发送 SQL 语句:在 WebSocket 消息中可直接发送 SQL 语句来执行查询。示例如下(包含参数用法):
{
"action": "execsql",
"db_name": "demo",
"sql": "Insert Into Table_Test(FCode,FName) values(:F1,:F2)",
"params": [
{
"name": "F1",
"value": "003"
},
{
"name": "F2",
"value": "f37"
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
使用SQL预设资料执行查询:如在SQL预设资料中设置了查询信息,可发送需查询的SQL预设资料来执行查询。创建一个名称为 SQL001
的预设资料,查询语句示例如下(包含参数用法):
Insert Into Table_Test(FCode,FName) values(:F1,:F2)
呼叫 WebSocket 执行数据库查询的文本示例如下:
{
"action": "execsql",
"db_name": "demo",
"sql_command_id": "SQL001",
"params": [
{
"name": "F1",
"value": "043"
},
{
"name": "F2",
"value": "d23"
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 2.9. 运行Python任务
在 WebSocket 消息中使用以下格式发送来添加Python运行任务。示例如下:
{
"action": "pythonscript",
"pyid": "{pyid}",
"varname": "{varname}",
"varvalue": "{varvalue}"
}
2
3
4
5
6
其中 {pyid}
为预设资料(资料类型为python
)的编号。{varname}
为python输入变量的名称。{varvalue}
为python输入变量的的取值。
这个接口的作用是从预设资料的Python脚本中创建运行任务,排入运行队列中,运行队列中的任务会按照请求的先后顺序依次进行执行。