使用Server Send Events时怎么调整函数的缓冲区大小呢?已经设置了proxy_buffering off;用的是nginx 函数服务。
ServerSocket的ReceiveBuf函数需要指定接受数据的起始地址,你就把新申请的缓冲区地址指定就OK了
1、申请缓冲区 FBufSize := BufSize; //这里的BufSize为要指定的缓冲区大小 GetMem(FReceiveBuf,FBufSize); //分配内存 FCurReceiveBuf := FReceiveBuf; //当前接收数据的位置初始化为缓冲区首地址 FPosition := 0; //当前位置初始化为0
2、接收数据:
try //接收数据到缓冲区 while Socket.ReceiveLength > 0 do begin MaxReceive := FBufSize - FPosition; //MaxReceive为当前可接受数据的最大值 //接收数据不得超过缓冲剩余大小 if Socket.ReceiveLength > MaxReceive then ReceiveLen := MaxReceive else ReceiveLen := Socket.ReceiveLength; FCurReceiveBuf := PByte(Integer(FReceiveBuf) + FPosition); //接收地址移动 //接收数据追加到缓冲区中 Socket.ReceiveBuf(FCurReceiveBuf^,ReceiveLen);
//置当前指针位置 FPosition := FPosition + ReceiveLen; //对缓冲区数据进行解析 AnalyzeBuf; end; except ClearBuf; end;
在使用Server Sent Events时,可以使用response.buffer_size属性来调整函数的缓冲区大小。
在Flask中,可以通过设置Flask应用的response_class属性,将其替换成自定义的Response类,然后在自定义的Response类中设置缓冲区大小。
示例代码如下:
from flask import Flask, Response
class CustomResponse(Response):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.headers['X-Accel-Buffering'] = 'no'
@classmethod
def force_type(cls, response, environ=None):
if isinstance(response, basestring):
response = Response(response)
if isinstance(response, Response):
response.headers['X-Accel-Buffering'] = 'no'
return super(CustomResponse, cls).force_type(response, environ)
app = Flask(__name__)
app.response_class = CustomResponse
在这个示例代码中,CustomResponse类继承自Flask默认的Response类,添加了一个初始化方法,用来设置X-Accel-Buffering响应头,禁用Nginx的缓冲机制。同时,force_type方法被重载,以确保Response对象的响应头也会被正确设置。
proxy_buffering off这个设置为off,那么proxy_buffers和proxy_busy_buffers_size这两个指令将会失效。但是无论proxy_buffering是否开启,proxy_buffer_size都是生效的。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。