Mojolicious:我应该使用一个 websocket 还是多个?
Mojolicious: should I use one websocket or several?
我正在自学 Mojolicious 和 websockets。到目前为止,我有一个网页显示数据库中的行,并有添加、删除和更新行的按钮,以及 select 列的排序按钮。
目前,它在每个按钮的 javascript 'onclick' 处理程序中使用 'one-shot' websockets,并且有效。
是否更符合 websockets 的意图,让套接字保持活动状态并用于多次点击?我认为答案应该是'yes',否则如果用户快速点击一个按钮几次就会变得混乱。
而且,作为一个风格问题,我应该只使用一个 websocket 来处理浏览器和服务器之间不同类型的交互,还是为每种类型使用单独的 websocket?拥有一个 websocket 需要代码来分析消息并决定如何处理它们。虽然几个 websocket 会更简单,但这需要重复错误处理代码等。
我知道这是一个冗长的哲学问题,但我想在进一步开发之前了解应用程序的整体形状。
Ajax 调用是客户端以 one-shot 类型的方法从服务器请求某些特定信息的有效方式。
webSocket 最适用于从客户端到服务器进行快速通信的情况(如此多的请求使您受益于持久连接),或者当您希望服务器能够将数据发送到客户端随意(因为你必须有一个持久连接才能将数据从服务器直接发送到客户端)。
使用 one-shot webSocket(在其中创建 webSocket,使用它然后关闭它)偶尔从客户端到服务器请求数据并不是最佳的处理方式,因为有额外的设置 ajax 调用中不存在的 webSocket 的开销,因为两端协商双方是否支持 webSockets 并同意将协议从 http 更改为 webSocket。
一个 one-shot webSocket 连接看起来像这样:
- 客户端建立到服务器的 TCP 套接字
- 客户端发送带有 webSocket 升级的初始 HTTP 请求 headers
- 服务器响应升级到webSocket协议可以
- 客户端发送消息
- 服务器接收消息并发送响应
- 客户端收到响应
- 客户端关闭 TCP 连接
Ajax 调用如下所示:
- 客户端建立到服务器的 TCP 套接字
- 客户端向服务器发送 HTTP 请求
- 服务器接收请求并发送响应
- 客户端收到响应
- 客户端关闭连接
并且,在浏览器中编码时,Ajax 调用会自动关闭(因为它是为 one-shot 请求设计的),因此客户端甚至不必在最后一步编码。
因此,如果您只是在 end-user 单击时从服务器请求一些信息,那么 Ajax 调用似乎是一种更有效的方法(并且更易于实现) .
仔细阅读了该主题并研究了代码,我得出以下结论:
- 这取决于您要做什么。一如既往
正如 jfriend00 所说,- Ajax 可能适合一次性消息。
- 根据我的需要,使用单个持久性 websocket 会更好。它减少了代码重复,但这意味着我必须自己发明一个简单的 command/response 序列来处理消息。
为确保 websocket 保持打开状态,我已调整 John Henry's idea。
我正在自学 Mojolicious 和 websockets。到目前为止,我有一个网页显示数据库中的行,并有添加、删除和更新行的按钮,以及 select 列的排序按钮。
目前,它在每个按钮的 javascript 'onclick' 处理程序中使用 'one-shot' websockets,并且有效。
是否更符合 websockets 的意图,让套接字保持活动状态并用于多次点击?我认为答案应该是'yes',否则如果用户快速点击一个按钮几次就会变得混乱。
而且,作为一个风格问题,我应该只使用一个 websocket 来处理浏览器和服务器之间不同类型的交互,还是为每种类型使用单独的 websocket?拥有一个 websocket 需要代码来分析消息并决定如何处理它们。虽然几个 websocket 会更简单,但这需要重复错误处理代码等。
我知道这是一个冗长的哲学问题,但我想在进一步开发之前了解应用程序的整体形状。
Ajax 调用是客户端以 one-shot 类型的方法从服务器请求某些特定信息的有效方式。
webSocket 最适用于从客户端到服务器进行快速通信的情况(如此多的请求使您受益于持久连接),或者当您希望服务器能够将数据发送到客户端随意(因为你必须有一个持久连接才能将数据从服务器直接发送到客户端)。
使用 one-shot webSocket(在其中创建 webSocket,使用它然后关闭它)偶尔从客户端到服务器请求数据并不是最佳的处理方式,因为有额外的设置 ajax 调用中不存在的 webSocket 的开销,因为两端协商双方是否支持 webSockets 并同意将协议从 http 更改为 webSocket。
一个 one-shot webSocket 连接看起来像这样:
- 客户端建立到服务器的 TCP 套接字
- 客户端发送带有 webSocket 升级的初始 HTTP 请求 headers
- 服务器响应升级到webSocket协议可以
- 客户端发送消息
- 服务器接收消息并发送响应
- 客户端收到响应
- 客户端关闭 TCP 连接
Ajax 调用如下所示:
- 客户端建立到服务器的 TCP 套接字
- 客户端向服务器发送 HTTP 请求
- 服务器接收请求并发送响应
- 客户端收到响应
- 客户端关闭连接
并且,在浏览器中编码时,Ajax 调用会自动关闭(因为它是为 one-shot 请求设计的),因此客户端甚至不必在最后一步编码。
因此,如果您只是在 end-user 单击时从服务器请求一些信息,那么 Ajax 调用似乎是一种更有效的方法(并且更易于实现) .
仔细阅读了该主题并研究了代码,我得出以下结论:
- 这取决于您要做什么。一如既往 正如 jfriend00 所说,
- Ajax 可能适合一次性消息。
- 根据我的需要,使用单个持久性 websocket 会更好。它减少了代码重复,但这意味着我必须自己发明一个简单的 command/response 序列来处理消息。
为确保 websocket 保持打开状态,我已调整 John Henry's idea。