• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
夜码人
            管理     

Marionette初识四----Protocol

1. Marionette 提供了一个面向用户的异步、并行流水线界面。 消息排序限制了有效载荷竞争条件的机会,并提供了一种有效载荷序列化的统一的方式。

2. 提供了阻塞 WebDriver 接口的客户端,使之不会在最后一个命令的响应返回之前发送进一步的命令请求,但如果碰巧因为编程错误而这样做,则不会造成任何损害。 这可以防止混淆响应。

消息流示意图:

               client      server
                 |            |
      msgid=1    |----------->|
                 |  command   |
                 |            |
      msgid=2    |<-----------|
                 |  command   |
                 |            |
      msgid=2    |----------->|
                 |  response  |
                 |            |
      msgid=1    |<-----------|
                 |  response  |
                 |            |

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Commend

1. 该协议由[命令]消息和相应的[响应]消息组成。 必须始终发送 [响应] 消息以回复 [命令] 消息。

这意味着服务器实现不需要按照收到命令的顺序精确发送回复:

如果服务器收到多条消息,服务器甚至可能以随机顺序回复。 因此,强烈建议客户端在实现此有线协议的客户端时考虑到这一点。 这是流水线消息所必需的。 在服务器端,有些功能很快,有些则不那么快。 如果服务器必须按顺序回复,即使它的执行已经完成,慢速函数也会延迟其他回复。

2. 协议的请求或命令消息有四要素,它可能来自客户端或服务器远程端:

[type, message ID, command, parameters]

type---必须是0(整数),表明该消息是一个[命令]。

message ID---是32位无符号整数,该编号用作唯一标识一对[命令]和[响应]消息的序列号。另一个远程部分将回复具有相同消息 ID 的相应 [响应]。

command---是标识 RPC 方法(要求执行命令)的字符串

parametes---是任意 JSON 可序列化的对象。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Response

1. 响应消息也是如下图所示的四元素数组,并且必须始终在接收到[命令]后发送

[type, message ID, error, result]

type---必须是 1(整数)。这表明该消息是 [response]

message ID---对应Command的message ID

error---如果命令正确执行,则为 null。如果错误发生在服务器端,那么这是一个 [error] 对象。

result---如果正确执行,它是执行 [command] 的结果对象。 如果服务器端发生错误,则该字段为空。

注意:result的结果字段可能各不相同,但对于每个command是单独记录的。

 

以下是一个错误的Response对象,错误对象是JavaScript 错误类型的序列化

{
    "error": "invalid session id",
    "message": "No active session with ID 1234",
    "stacktrace": ""
}

错误对象的所有字段都是必须的,所以message &&stacktrace可能是空,错误字段保证是 [WebDriver 标准] 规定的 JSON 错误代码之一。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Clients--客户端

客户端可以用任何能够通过 TCP 套接字写入和接收数据的语言来实现。客户端可以同步和异步实现,尽管后者在协议级别 2 和更早版本中是不可能的,因为缺少消息排序。

posted @ 2021-11-03 10:49  夜码人  阅读(98)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3