New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
http2 / grpc问题 #715
Comments
原因:目前brpc client的h2setting是和req一起发过去的,这时用的是默认大小,如果超过这个值,就发不出去,那么client的h2setting也发不出去,server端的h2setting也不会回复给client,server端的window size就不能传到client workaround:
|
server端是 grpc 服务,怎么改动windowsize? |
这个你要看grpc的文档了 |
有更优雅的方式吗? |
server设置了windows大小,好像还是不行 |
@kaydxh Client还需要先发一个小的包,比如访问下内置服务/health |
试了下,先发个小包再发大包,确实没有windows size的问题了。 可惜server端grpc没有内置的/health服务,小包这个trick还不太好应用。 总的来说,是一个解决办法,但比较麻烦,不够完美。 |
client h2setting里默认的window_size可以改大吗? |
这两个值是可以设置的,确保下server是否收到了,以及正确返回了。然后看一下 ip:port/connections 中client channel的socket页面(有链接可以点),在页面里找到agent_socket_id,然后看一下ip:port/sockets/<agent_socket_id>里的h2 local setting是不是正确 |
我本地试了下,是可以正确设置的,把你起client程序的命令发一下吧 |
client端进程启动流程大概是这样的: client请求grpc的流程大概是这样的: |
FLAGS_h2_client_stream_window_size这个值是代表client的配置,一般是写在起程序的conf里的,不是赋给ServerOptions.h2_settings的,该值是server端的配置。一般用法是这样的,./client --h2_client_stream_window_size=xxx --h2_client_connection_window_size=yyy |
进程启动方式应该没问题,其他配置都正常读到的。 |
@kaydxh @supernovaer 关于要先发一个小包来解决setting交换的问题,spec对这个问题有相关说明,当client还未收到server setting时,可以先发数据,如下图 |
把H2Settings构造函数connect_window_size的默认值加大,临时解决这个问题了。 |
说错了,是把 stream_window_size的默认值加大 |
h2_client_connection_window_size/h2_client_stream_window_size是有用的,这是client的参数,你赋给了serveroptions是没用的,这是让client的配置错误地在server上应用,这是client告诉server,自己这里有多大的windowsize,你需要在client的程序启动时设置 |
修改H2Settings构造函数stream_window_size的初始化值,这是我本地临时的解决方案。 |
在H2Context构造的时候会把默认值用FLAGS_h2_client_stream_window_size以及FLAGS_h2_client_max_frame_size替换,所以还是用的这两个参数
sepc说可以先发请求以减少延迟
现在当某一个包比server remote window还大时,目前的做法是直接失败了。可以改成先发一个包,等对方的window_update发过来以后,再继续发下一个包,这个目前是个TODO |
Fixed in #849 |
Got it! |
Describe the bug (描述bug)
[E2004]remote_window_left is not enough, data_size=629370 [R1][E2004]remote_window_left is not enough, data_size=629370
W0403 10:03:43.719316 12510 http2_rpc_protocol.cpp:206] Unknown setting, id=65027 value=1
To Reproduce (复现方法)
http2 client连 grpc服务端,传输大小600KB
Expected behavior (期望行为)
Versions (各种版本)
OS: centos 7
Compiler: gcc4.8
brpc: 0.9.5
protobuf: 3.5
Additional context/screenshots (更多上下文/截图)
传输数据大了,该怎么改?
The text was updated successfully, but these errors were encountered: