# 使用Server-Sent Events协议的方式访问在线服务
#### 背景说明
Server-Sent Events（SSE）是一种服务器向客户端推送数据的技术，它是一种基于HTTP的推送技术，服务器可以向客户端推送事件。这种技术通常用于实现服务器向客户端单向推送实时数据，例如实时新闻更新、股票价格等。
SSE主要解决了客户端与服务器之间的单向实时通信需求（例如大模型回答的流式输出），相较于WebSocket（双向实时），它更加轻量级且易于实现。
使用SSE协议访问在线服务有以下特点：
- 简单易用：SSE协议基于HTTP协议，实现简单，客户端无需复杂的配置或额外的库支持，可以通过普通的HTTP连接实现数据的实时推送。
- 自动重连：SSE支持自动重连机制，当连接中断时，客户端会自动尝试重新连接，确保数据推送的连续性。
- 单向通信：SSE是单向的，服务器可以向客户端发送事件，但客户端不能通过同一个连接向服务器发送数据。
- 资源占用低：SSE使用HTTP连接，相对于WebSocket等其他实时通信协议，资源占用较低，适合轻量级的实时数据推送场景。
 
#### 前提条件
- [部署在线服务-部署配置](https://support.huaweicloud.com/inference-modelarts/inference2.0-modelarts-0004.html#ZH-CN_TOPIC_0000002606698915__section17871155203218)的模型导入选择的镜像需支持SSE协议。
- [配置服务信息](https://support.huaweicloud.com/inference-modelarts/inference2.0-modelarts-0016.html#ZH-CN_TOPIC_0000002555517990__section14135916115214)时，在网络配置中服务协议需选择"HTTP"或"HTTPS"。
 
#### 约束与限制
- SSE协议只支持部署在线服务。
- 只支持自定义镜像导入模型部署的在线服务。
- 调用API访问在线服务时，对预测请求体大小和预测时间有限制：
  - 请求体的大小不超过服务运行配置中的请求大小限制，超过后请求会被拦截。
  
  - 平台每次请求预测的时间不超过服务运行配置中的请求超时时间。
   
 
#### 获取认证信息、预测文件的本地路径、在线服务的调用地址
- **认证信息**
  SSE协议本身不提供额外的认证方式，和HTTP请求方式一致。
  根据服务部署时选择的认证方式获取认证信息。无认证方式无需获取认证信息。
  - [Token认证](https://support.huaweicloud.com/inference-modelarts/inference2.0-modelarts-0007.html#ZH-CN_TOPIC_0000002543191169__section185861327115517)
  
  - [API KEY认证](https://support.huaweicloud.com/inference-modelarts/inference2.0-modelarts-0008.html#ZH-CN_TOPIC_0000002511711226__zh-cn_topic_0165025308_section134041911727)
  
  - [无认证](https://support.huaweicloud.com/inference-modelarts/inference2.0-modelarts-0006.html)
  
  
  本章节以Token认证为例，用户Token的获取请参见[获取Token认证](https://support.huaweicloud.com/api-modelarts/modelarts_03_0004.html#section0)。获取Token认证时，由于ModelArts生成的在线服务API不支持domain范围的token，因此需获取使用范围为project的Token信息，即scope参数的取值为project。
  
- **在线服务的调用地址**
  在线服务的调用地址和输入参数信息，可以在控制台的"模型推理 \> 在线推理"，单击指定在线服务，在"服务"页签的"调用信息"获取。
  "调用URL"即在线服务的调用地址。当模型配置文件中apis定义了路径，调用地址后需拼接自定义路径。如："{在线服务的调用地址}/v1/chat/completions"。
  
 
#### SSE调用在线服务
1. 下载Postman软件并安装，您也可以直接在Chrome浏览器添加Postman扩展程序（也可使用其他支持发送post请求的软件）。Postman推荐使用8.11.1版本。
2. 打开Postman，在Postman界面填写参数。
   - 选择POST任务，将已获取的在线服务调用地址复制到POST后面的方框。地址后添加 /v1/sse 即可使用SSE进行访问。在header中添加认证信息，不同认证方式有不同header，跟https的推理服务相同。以Token认证为例：Headers页签的Key值填写为"X-Auth-Token"，Value值为用户Token。 正常情况下，可以观察到响应头Content-Type为text/event-stream;charset=UTF-8。
     图1参数填写
     ![](https://support.huaweicloud.com/inference-modelarts/figure/zh-cn_image_0000002543191261.png)
     图2响应头Content-Type   
     ![](https://support.huaweicloud.com/inference-modelarts/figure/zh-cn_image_0000002511551320.png) 
   
   - 选择"raw"，选择JSON(application/json)类型，在下方文本框中填写请求体，请求体格式与内容与用户部署模型相关，平台不做任何处理。
     图3在线服务iam认证，文本请求示意图   
     ![](https://support.huaweicloud.com/inference-modelarts/figure/zh-cn_image_0000002511711304.png)
     请求体样例如下：
     ```
     {
         "model": "test",
         "messages": [
             {
                 "role": "user",
                 "content": "你是谁？"
             }
         ],
         "max_tokens": 100,
         "top_k": -1,
         "top_p": 1,
         "temperature": 0,
         "ignore_eos": false,
         "stream": false
     }
     ```
     
     
    
3. 参数填写完成，单击"send"发送请求，结果会在"Response"下的对话框里显示。 预测结果样例如[图4]所示，具体返回内容与格式与用户部署模型相关。
   
   图4文本输入预测结果
   ![](https://support.huaweicloud.com/inference-modelarts/figure/zh-cn_image_0000002543191263.png)
   
 
