主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

测试 Web 请求处理程序

您可以使用 Production Server 编译器中的测试界面来测试 Web 请求处理程序,以便部署到 MATLAB® Production Server™。每个 Web 请求处理程序包括:

  • 接收请求并返回响应的 MATLAB 函数。

  • URL 路由到该函数,在服务器上的 JSON 文件、打包到包含该函数的可部署存档中的 JSON 文件或两个位置的文件中指定。

要设置 Web 请求处理程序的测试接口,您需要配置对 URL 路由的访问。要配置对路由文件的访问,请设置指定路由文件路径的环境变量,或将路由文件放在 MATLAB 预设项录中。当您启动测试界面时,它首先搜索路由文件的环境变量。如果未设置环境变量,则测试界面会在 MATLAB 预设项录中搜索路由文件。配置对路由文件的访问权限后,您可以测试 Web 请求处理程序的 MATLAB 函数。

有关定义 Web 请求处理程序的详细信息,请参阅处理 HTTP 请求中的自定义路由和负载 (MATLAB Production Server)

为路由文件设置环境变量

要指定适用于服务器实例上的所有存档的实例级路由,请将环境变量 PRODSERVER_ROUTES_FILE 设置为包含路由文件路径的值(例如,instance/routes.json)。您可以在 MATLAB 提示符下使用 setenv 设置环境变量,或者在系统命令提示符下使用特定于您的操作系统的语法设置环境变量。

setenv('PRODSERVER_ROUTES_FILE','instance/routes.json');

要指定仅适用于特定存档的存档级路由,请将环境变量 PRODSERVER_ROUTES_FILE_LOCAL 设置为包含路由文件路径的值(例如,archive/routes_local.json)。

setenv('PRODSERVER_ROUTES_FILE_LOCAL','archive/routes_local.json');

如果同时指定实例级和存档级环境变量,则任何实例级匹配都优先于存档级匹配。如果您在环境变量和 MATLAB 预设项文件夹中都指定实例级或存档级路由文件,则环境变量文件中的路由优先。

测试之前,请记住以下几点:

  • 如果您指定了路由文件的相对路径,请从 MATLAB 提示符中导航到包含路由文件的文件夹,然后在 Production Server 编译器中启动测试服务器。

  • 如果您更新已在使用的路由文件的内容或位置,为了使更改生效,请在 Production Server 编译器中重新启动测试服务器。

  • 要关闭 Web 请求处理程序的测试,请将环境变量设置为空值。

使用 MATLAB 预设项文件夹保存路由文件

作为配置对路由文件的访问的替代方法,您可以将文件复制到 MATLAB 预设项文件夹。此配置在 MATLAB 重新启动后仍然有效。您必须按如下方式命名路由文件:

  • 实例级路由文件 - prodserver_routes.json

  • 存档级路由文件 - prodserver_routes_local.json

要定位您的预设项文件夹,请在 MATLAB 提示符下键入 prefdir

  • 如果同时指定实例级和存档级环境变量,则任何实例级匹配都优先于存档级匹配。

  • 如果您在环境变量和 MATLAB 预设项文件夹中都指定实例级或存档级路由文件,则环境变量文件中的路由优先。

  • 如果您更新已在使用的路由文件的内容或位置,为了使更改生效,请在 Production Server 编译器中重新启动测试服务器。

  • 要关闭 Web 请求处理程序的测试,请从预设项文件夹中重命名或移动路由文件,然后重新启动测试服务器。

端到端设置以测试 Web 请求处理程序

此示例展示了如何在 PSC 应用中测试 Web 请求处理程序函数

创建路由文件

使用文本编辑器创建路由 JSON 文件以将客户端请求映射到 MATLAB Web 处理程序函数。将文件另存为 routes.json

该路由文件将包含路径段 /greet/ 客户端请求 URL 映射到可部署存档 hellowh 中的 whdemo MATLAB 函数。例如,http://localhost:9910/greet/rest/of/path

{
  "version": "1.0.0",
    "pathmap": [
        {
            "match": "^/greet/.*",
            "webhandler": {
                "component": "whdemo",
                "function": "hellowh"
            }
        }     
    ]
}

如果您正在测试存档级路由 JSON 文件,则指定存档名称的 component 字段是可选的。该路由文件将包含可部署存档名称和路径段 /greet/ 的客户端请求 URL 映射到 hellowh MATLAB 函数。例如,http://localhost:9910/archive_name/greet/rest/of/path

{
  "version": "1.0.0",
    "pathmap": [
        {
            "match": "^/greet/.*",
            "webhandler": {
                "function": "hellowh"
            }
        }     
    ]
}

配置对路由文件的访问

从 MATLAB 提示符中,设置环境变量 PRODSERVER_ROUTES_FILE 以指定路由文件的路径。

setenv('PRODSERVER_ROUTES_FILE', 'J:\routes.json');

如果您正在测试存档级路由 JSON 文件,则请设置 PRODSERVER_ROUTES_FILE_LOCAL 环境变量。

setenv('PRODSERVER_ROUTES_FILE_LOCAL', 'J:\routes_local.json');

为 Web 请求处理程序编写 MATLAB 函数

要作为 Web 请求处理程序工作,MATLAB 函数必须接受一个标量结构体数组作为输入,并返回一个标量结构体数组作为输出。

以下代码显示了 MATLAB 函数 hellowh.m,它使用输入参量结构 request,其字段提供有关请求标头和正文的信息。该函数还构建并返回结构 response,其字段包含成功 HTTP 代码和状态消息、自定义标头和消息正文。

function response = hellowh(request)
    disp(request);
    disp('request.Headers:');
    disp(request.Headers);
    bodyText = char(request.Body);
    disp('request.Body:');
    if length(bodyText) > 100
        disp(bodyText(1:100));
        disp('...');
    else
        disp(bodyText);
    end

    response = struct('ApiVersion', [1 0 0], ...
                      'HttpCode', 200, ...
                      'HttpMessage', 'OK', ...
                      'Headers', {{ ...
                        'Server' 'WebFunctionTest/1'; ...
                        'X-MyHeader' 'foobar'; ...
                        'X-Request-Body-Len' sprintf('%d', length(request.Body)); ...
                        'Content-Type' 'text/plain'; ...
                      }},...
                      'Body', uint8('hello, world'));
   
    disp(response);
    disp('response.Headers:');
    disp(response.Headers);
end

准备测试

  1. 在 MATLAB 命令提示符下输入以下内容打开 Production Server 编译器

    productionServerCompiler

  2. 在工具条的 Type 部分中,选择 Deployable Archive (.ctf)

  3. 指定要部署的 MATLAB 函数。

    1. 在工具条的 Exported Functions 部分,点击加号按钮。

    2. 使用文件资源管理器,定位并选择 hellowh.m 文件。

  4. Archive information 设置为 whdemo

  5. 点击 Test Client。App 切换到 Test 选项卡。

  6. 点击 Start 以开始测试。如果有错误,Server Log 部分会显示错误。

调用 Web 处理程序 MATLAB 函数

使用您选择的客户端来调用已部署的函数。

以下命令使用 cURL 从系统命令行调用已部署的函数。

curl -v http://localhost:9910/greet/this/could/be/any/path?param=YES

您会在系统命令行看到以下输出。

*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 9910 (#0)
> GET /MyDemo/this/could/be/any/path?param=YES HTTP/1.1
> Host: localhost:9910
> User-Agent: curl/7.55.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: WebFunctionTest/1
< X-MyHeader: foobar
< X-Request-Body-Len: 0
< Content-Type: text/plain
< Content-Length: 12
< Connection: Keep-Alive
<
hello, world* Connection #0 to host localhost left intact

Web 处理程序函数中的 disp 命令的输出显示在 MATLAB 命令行窗口中。

如果您正在测试存档级路由,则在端口号之后,请求必须包含存档名称,并且前后均带有斜杠。

curl -v http://localhost:9910/whdemo/greet/this/could/be/any/path?param=YES

检查数据

  1. 切换回 Production Server 编译器

  2. 在测试界面的 MATLAB 执行请求下,点击 App 中的已完成消息即可查看客户端与 MATLAB 之间交换的值。

    Production Server Compiler app testing interface displaying input and output of web request handler function.

  3. 点击输入可查看传递到 MATLAB 数据。

  4. 点击输出可查看返回到客户端的数据。

测试满意后,您可以打包 MATLAB 函数并将其部署到服务器。

注意

Production Server 编译器支持测试但不支持存档级路由的打包。如果您测试存档级路由 JSON 文件中定义的路由,然后构建存档,则路由文件不会包含在存档中,并且路由不起作用。要打包存档级路由,请使用 mcc 命令。

有关创建可部署存档的详细信息,请参阅针对 MATLAB Production Server 创建可部署存档

另请参阅

主题