记录和重播 RealityServer Web 服务请求

Logging and replaying RealityServer Web Services requests

我正在尝试诊断我的 RealityServer 应用程序的问题,但是使用我的应用程序用户界面手动重现问题变得非常耗时。

有没有什么方法可以记录和重播 RealityServer 收到的 JSON-RPC Web 服务命令,这样我就可以在不使用应用程序用户界面的情况下重现我的问题?

RealityServer 提供了两种监控请求的工具。您可能对这种情况感兴趣的主要插件是 Commandlog 插件,它随 RealityServer 一起提供,但默认情况下处于禁用状态。您需要编辑 realityserver.conf 文件并取消注释相关行。这是文件的相关部分:

# uncomment below to enable the command logging state handler.
# this will record every JSON-RPC command received during a RealityServer
# session into a python script which can later be replayed to re-run the
# session. this can be useful for tracking down bugs.
# note that when enabled this will overwrite the replay.py file every
# time RealityServer starts so you must ensure you make a copy of any
# file you wish to keep. The file is created in the working directory,
# not the RealityServer root.
<url .*>
state Commandlog_state_handler
</url>

如上所述,启用此状态处理程序会将所有 JSON-RPC 请求记录到一个特殊的 Python 文件中。然后你可以像这样 运行 这个文件:

python replay.py 127.0.0.1:8080

这会将记录的命令序列发送到 运行ning RealityServer。命令将与记录的命令完全相同,但不包括时间,因此将尽可能快地回放。如果您的问题对时间敏感,您可能需要使用替代方法来捕获和重放数据。

注意: RealityServer 会在启动时覆盖 replay.py 文件,因此如果您希望在两次启动之间保留该文件,则必须将该文件复制到另一个名称。如果您使用脚本自动重启 RealityServer,您需要注意包括一个将文件复制出来的步骤。

如果您希望记录所有 HTTP 请求而不仅仅是 JSON-RPC 请求,您还可以添加以下 realityserver.conf 选项这个:

http_log access.log

这将以 Apache 日志格式记录所有请求,这对于与支持该格式的工具一起使用很有用。可以找到 RealityServer 配置选项的完整列表 here

要么用您选择的任何编程语言为其编写您自己的程序,要么尝试 Fiddler。 Fiddler 可以记录 HTTP 会话并重播它们。