更新时间:2026-02-06 GMT+08:00
分享

使用WebSocket协议的方式访问在线服务

背景说明

在实时通信和在线游戏中,传统的HTTP协议由于需要频繁建立和断开连接,导致延迟高和带宽消耗大。WebSocket是一种网络传输协议,使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就可以建立持久性的连接,并进行双向数据传输。适用于实时通信、在线游戏等需要双向实时通信的场景。

WebSocket适用于需要在ModelArts平台上部署在线服务的场景。需要注意的是,WebSocket仅支持在线服务,并且在ModelArts平台上使用时,协议会被转换为WSS,支持单向认证。

使用WebSocket协议访问在线服务有以下特点:

  • 持久连接:WebSocket在客户端和服务器之间建立持久连接,无需像HTTP那样频繁建立和断开连接,减少了连接建立的开销。
  • 双向数据传输:支持双向通信,允许服务器主动向客户端推送数据,而不仅仅是响应客户端请求。
  • 减少延迟和带宽消耗:由于连接保持打开状态,数据可以实时传输,减少了延迟,并且减少了不必要的HTTP请求,节省了带宽。

前提条件

  • 在线服务部署时在调用配置中服务协议需选择“WSS”“WS”
  • 在线服务中的模型导入选择的镜像需支持WebSocket协议。

约束与限制

  • WebSocket协议只支持部署在线服务。
  • 若服务端返回的单条消息超过 64KB,系统将自动按协议规范将其分割为多个数据帧传输(单帧有效载荷不超过 64KB)。
  • 调用API访问在线服务时,对预测请求体大小和预测时间有限制:
    • 请求体的大小不超过服务运行配置中的请求大小限制,超过后请求会被拦截。
    • 平台每次请求预测的时间不超过服务运行配置中的请求超时时间(发生数据传输时将重新计算超时时间)。

获取认证信息、预测文件的本地路径、在线服务的调用地址

  • 认证信息

    WebSocket协议本身不提供额外的认证方式。WSS只支持客户端对服务端的单向认证,不支持服务端对客户端的双向认证。

    根据服务部署时选择的认证方式获取认证信息。无认证方式无需获取认证信息。

    本章节以API KEY认证为例,需要获取API KEY内容:在调用服务前,需要创建API KEY该API KEY已绑定待访问的在线服务打开创建API KEY后自动下载的csv文件,打开文件后可看到api_key字段就是具体的API KEY内容。

  • 预测文件的本地路径

    预测文件的本地路径既可使用绝对路径(如Windows格式"D:/test.png",Linux格式"/opt/data/test.png"),也可以使用相对路径(如"./test.png")。

  • 在线服务的调用地址

    在线服务的调用地址和输入参数信息,可以在控制台的“模型推理 > 在线推理”,单击指定在线服务,在服务“基本信息”页签的“调用信息”获取。

    “调用URL”即在线服务的调用地址。当模型配置文件中apis定义了路径,调用地址后需拼接自定义路径。如:“{在线服务的调用地址}/v1/chat/completions”。

    图1 获取在线服务API接口地址

认证在线服务

WebSocket协议本身不提供额外的认证方式。WSS只支持客户端对服务端的单向认证,不支持服务端对客户端的双向认证。

根据服务部署时选择的认证方式调用在线服务:

建立WebSocket连接

  1. 打开Postman工具(需选择8.5 以上版本,以10.12.0为例),单击左上角,选择“File>New”,弹出新建对话框,选择“WebSocket Request”(当前为beta版本)功能:
    图2 选择WebSocket Request功能
  2. 在新建的窗口中填入WebSocket连接信息:

    左上角选择Raw,不要选择Socket.IO(一种WebSocket实现,要求客户端跟服务端都要基于Socket.IO),地址栏中填入从服务详情页“服务”页签中获取“调用信息-调用URL”的地址。

    如果自定义镜像中有更细粒度的地址,则在地址后面追加更细粒度的URL。如果有queryString,那么在params栏中添加queryString参数。

    在header中添加认证信息,不同认证方式有不同header,跟https的推理服务相同。以API KEY认证为例:Headers页签的Key值填写为“Authorization”,Value值为"Bearer"加空格加API KEY的内容。

    图3 获取API接口调用公网地址
  3. 选择单击右上的connect按钮,建立WebSocket连接。
    • 如果信息正确,右下角连接状态处会显示:CONNECTED。
    • 如果无法建立连接,是401状态码,检查认证信息。
    • 如果显示WRONG_VERSION_NUMBER等关键字,检查自定义镜像的端口和ws跟wss的配置是否正确。

    连接成功后结果如下:

    图4 连接成功

    优先验证自定义镜像提供的websocket服务的情况。不同的工具实现的websocket服务会有不同,可能出现连接建立后维持不住,可能出现请求一次后连接就中断需要重新连接的情况。ModelArts平台只保证,未上ModelArts前自定义镜像的websocket的形态,和上了ModelArts平台后的websocket形态相同(除了地址跟认证方式不同)。

WebSocket客户端和服务端双向传输数据

连接建立后,WebSocket使用TCP完成全双工通信。WebSocket的客户端可以往服务端发送数据,客户端有不同的实现,同一种语言也存在不同的lib包的实现,这里不考虑实现的不同种类。

客户端发送的内容在协议的角度不限定格式,Postman支持Text/Json/XML/HTML/Binary,以text为例,在输入框中输入要发送的文本,单击右侧中部的“Send”按钮即可将请求发往服务端,结果会在“Response”下的对话框里显示。

图5 发送数据

相关文档