-
Notifications
You must be signed in to change notification settings - Fork 797
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
xprotocol协议代理出现了serverCallbacks为空的panic问题 #2338
Comments
protocolA 你自己实现的协议吗 |
是的。是在xrpotcol的框架下实现的 |
https://github.com/mosn/mosn/blob/07be2d0d6b9cee511262f85132277fcf937be23b/pkg/stream/xprotocol/conn.go#L254C11-L254C19 |
好的。 谢谢您。我再研究研究 |
您好,我这边定位到了,发现是协议中没有字段表明是request还是response,因此返回的都是requst,请问有什么好的办法区分么?莫非要加个filter(filter中把mosn自带的direction设置到variable中??) |
你从ctx里面可以感知到时downstream还是upstream,你可以在frame里面直接保存是request,还是response |
这儿你可以不根据协议(你的协议没有字段判断),你可以根据你现在是downstream和upstream的连接来判断,downstream是request,upstream是reponse。 |
2023-08-15 13:58:04,410 [DEBUG] [network] [server idle checker] connection have read/write data before this read timeout: 308, 314, 0, 0 中间省略 下面是接收到返回后,打印的日志 |
你用的什么connpool?方便看看你的代码吗 |
直接 %+v 打印 ctx 看看 |
因为client是有多个, 如果这儿不换成新的唯一id,发送给服务端的时候会有冲突。 |
如果你的协议不支持多路复用,可以选择pingpong的connpool,类似http1. |
有唯一id的。 目前发现收到服务端的响应后,因为找不到clientStream,导致mosn终止了给客户端的响应,您知道是哪块的问题么? |
|
那是不是你实现的setrequestid方法不对? |
是的,我修改了该方法,处理response的时候设置成发送时候的Requestid,非常感谢您的耐心指导。 对了,顺便问下您,您知道取ctx中的哪个key是代表direction的么?我目前没发现,因此自己手动设置了下。 |
你暂时用 |
好的,谢谢您。 |
您好,请问下,今天压测过程中发现数据出现了交叉,只有在压测过程中才会出现数据交叉的情况,请问能从哪几个方面去查询的呢? |
意思就是server收到了client1和client2的部分数据,就是不完整的请求吗? |
是多路复用,而且xprotocol只支持多路复用的吧?之前改成pingpong的时候服务起不来。server是可以支持多路复用的呢,因为server端每接收到一个请求,就会启动一个协程。 |
你可以打一个debug日志出来看看,有tracelog,能关联出来的,是不是id错乱了 |
您好,请问client到mosn发现有请求id为空,我这边写的请求id为空,那么setRequestID默认是0,是不是这个会导致数据错乱?如果是的话,怎么避免的呢? |
那肯定有问题,你发送id为空的两个请求,没办法判断回包是属于那个请求啊 |
你如果请求id为空,就证明你不支持多路复用啊,只支持pingpong模型了,或者pipeline。 |
好的。谢谢您,目前定位到确实也是这个问题 |
那你可以用pingpong的connpool试试,串行的,就不会乱了 |
您好,这里我还有个问题,我发现错乱的场景是这样的: 测试方式: 在这个场景下,客户端B和客户端C接收到的数据中会夹杂着客户端A发送的数据,比如可能接收到的是{"name":"a","iphone":"13pro"}或者是{"nameipho":"13a"}(只是为了说明数据错乱了,而且无规则) 请求无uuid的情况下,这个case是合理的么? |
这儿的uuid是协议的唯一id吗 |
uuid是协议的唯一id,server端也会返回的这个唯一id的呢。 按理来说客户端B和C不会出现客户端A中的数据吧? |
那其实server收到的请求都是有uuid的钱,因为mosn会生成的,有没有可能server端有问题?最好有个debug日志 |
Your question
MOSN的config文件如下:
访问运行出现了panic,问题截图:
跟踪代码发现:
Environment
master分支,最新版本
Logs
请问这个是mosn自身的问题还是我这边配置的问题?
The text was updated successfully, but these errors were encountered: