Skip to content

Conversation

@ltmit
Copy link
Contributor

@ltmit ltmit commented Jul 4, 2022

添加对http long-connection session模式的支持。即一直保持http连接,并且response不断追加发送数据的工作模式。
此模式常用于需要保持连接完成大量数据发送(如发送超长文件)或者数据不定时发送(如:视频实时推流,x-mixed-replace,部分web-socket应用场景等)。
主要改动(API接口部分):
1、在Http Response类(Res)中,新增一个send_body方法。此方法可在设置完header(add_header)后使用。用户每次调用send_body将即时发送一批body数据(因此,第一次调用send_body会附加Http response header的发送)。用户可以在保证当前协程函数(on_req)不退出的情况下任意多次调用send_body,直至业务数据发送完毕或者出错(send_body返回非0)。无论出错还是正常完成,退出当前协程函数即完成本http session资源的清理。
2、因为send_body(长连接)模式与set_body(短链接)模式互斥,因此修改set_body函数返回值为bool。用户调用set_body以后将无法调用send_body,同理用户调用send_body以后也将无法调用set_body(返回false)。
实现部分改动:
在Response-ctx类实现中,增加3个成员:

  • tcp::Connection pc_; //存放本http Session socket connection的指针。短连接时用不到,仅在长连接模式下使用
  • header_send; //header是否发送的状态码。初始化为0,表示header未处理。为-1表示header已经pack但未发送(短链接模式),为1表示header已经发送(长连接模式)。
  • s_err:仅用于长连接模式,表示是否有socket_error。
@akofer
Copy link

akofer commented Dec 31, 2022

@idealvin 这个 pr 没有回应哦

@idealvin
Copy link
Owner

这块后续有空再清理

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

4 participants