JavaScript 请求与数据的连接

JavaScript request connection with data

我的任务是创建 javascript 实时应用程序。服务器端已准备就绪(wss://),我必须创建客户端。

我遇到问题的主要任务:

客户端可以 ping 服务器来检查您的连接。客户端执行 ping,包括序列号(允许跟踪确切的 ping 持续时间)。

{
  "$type": "ping",
  "seq": 1
}

服务器将响应:

{
  "$type": "pong",
  "seq": 1
}

客户请求

{
  "$type": "subscribe_tables"
}

服务器将响应表列表,并在状态发生变化时用 table_added、table_removed 和 table_updated 消息更新客户端。

{
  "$type": "table_list",
  "tables": [
    {
      "id": 1,
      "name": "table 1",
      "description" : "one, two"
    }, {
      "id": 2,
      "name": "table 2"
      "description" : "two, three"
    }
  ]
}

table_updated 事件

{
  "$type": "update_table",
  "table": {
    "id": 3,
    "name": "table - Foo Fighters",
    "participants": 4
  }
}

问题: 我知道,我可以使用 new EventSource(),这是正确的吗?我如何发送数据 $type,例如用它发送数据?

I know, that I can use new EventSource(), is this correct? How can I send data $type, for example with it?

不,那是不正确的。如果您的服务器需要一个 webSocket 连接,那么您可以从客户端使用 new WebSocket(...) 来建立从客户端到服务器的连接。 EventSource() 对象用于服务器端事件,这是与 webSocket 完全不同的传输方式。

您可以查看使用 webSocket 的编程示例 here on MDN

此外,如果您尝试将 Javascript 个对象作为数据发送,您通常会使用 JSON.stringify() 将它们序列化为一个字符串,然后发送,然后在接收端,您会使用 JSON.parse() 将 JSON 字符串解析回 Javascript 对象。这就是您在同一封邮件中发送 $type 等信息以及其他数据的方式。

仅供参考,socket.io 是一个建立在 webSocket 之上的库,它已经变得非常流行,因为它自动为您做了很多 webSocket 编程通常需要的事情,例如 JSON 序列化, 自动重连, 自动keep alive, 连接掉线检测等等...你当然不用在client和server中使用它,但它通常会节省很多时间。