使用websocket协议的方式访问在线服务-九游平台
背景说明
websocket是一种网络传输协议,可在单个tcp连接上进行全双工通信,位于osi模型的应用层。websocket协议在2011年由ietf标准化为rfc 6455,后由rfc 7936补充规范。web idl中的websocket api由w3c标准化。
websocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在websocket api中,浏览器和服务器只需要完成一次握手,两者之间就可以建立持久性的连接,并进行双向数据传输。
前提条件
- 在线服务部署时需选择“升级为websocket”。
- 在线服务中的模型导入选择的镜像需支持websocket协议。
约束与限制
- websocket协议只支持部署在线服务。
- 只支持自定义镜像导入模型部署的在线服务。
- 调用api访问在线服务时,对预测请求体大小和预测时间有限制:
- 请求体的大小不超过12mb,超过后请求会被拦截。
- 因apig(api网关)限制,平台每次请求预测的时间不超过40秒。
websocket在线服务调用
websocket协议本身不提供额外的认证方式。不管自定义镜像里面是ws还是wss,经过modelarts平台出去的websocket协议都是wss的。同时wss只支持客户端对服务端的单向认证,不支持服务端对客户端的双向认证。
可以使用modelarts提供的以下认证方式:
websocket服务调用步骤如下(以图形界面的软件postman进行预测,token认证为例):
- websocket连接的建立
- 打开postman(需选择8.5 以上版本,以10.12.0为例)工具,单击左上角
,选择“file>new”,弹出新建对话框,选择“websocket request”(当前为beta版本)功能:
图1 选择websocket request功能
- 在新建的窗口中填入websocket连接信息:
左上角选择raw,不要选择socket.io(一种websocket实现,要求客户端跟服务端都要基于socket.io),地址栏中填入从服务详情页“调用指南”页签中获取“api接口调用公网地址”后面的地址。如果自定义镜像中有更细粒度的地址,则在地址后面追加该url。如果有querystring,那么在params栏中添加参数。在header中添加认证信息(不同认证方式有不同header,跟https的推理服务相同)。选择单击右上的connect按钮,建立websocket连接。
图2 获取api接口调用公网地址
- 如果信息正确,右下角连接状态处会显示:connected;
- 如果无法建立连接,如果是401状态码,检查认证信息;
- 如果显示wrong_version_number等关键字,检查自定义镜像的端口和ws跟wss的配置是否正确。
连接成功后结果如下:
图3 连接成功
优先验证自定义镜像提供的websocket服务的情况,不同的工具实现的websocket服务会有不同,可能出现连接建立后维持不住,可能出现请求一次后连接就中断需要重新连接的情况,modelarts平台只保证,未上modelarts前自定义镜像的websocket的形态跟上了modelarts平台后的websocket形态相同(除了地址跟认证方式不同)。
- 打开postman(需选择8.5 以上版本,以10.12.0为例)工具,单击左上角
- websocket客户端和服务端双向传输数据
连接建立后,websocket使用tcp完成全双工通信。websocket的客户端可以往服务端发送数据,客户端有不同的实现,同一种语言也存在不同的lib包的实现,这里不考虑实现的不同种类。
客户端发送的内容在协议的角度不限定格式,postman支持text/json/xml/html/binary,以text为例,在输入框中输入要发送的文本,单击右侧中部的send按钮即可将请求发往服务端,当文本内容过长,可能会导致postman工具卡住。
图4 发送数据
相关文档
意见反馈
文档内容是否对您有帮助?
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨