-
Notifications
You must be signed in to change notification settings - Fork 10
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
[部分破坏性更新] 修复部分问题 & 修改client逻辑 & 添加函数 #21
Conversation
忽略 `.idea` 目录,更换 `websocket` 库
函数返回值类型优化
先别合并,有个地方内存泄露了 |
????诶?????? |
用的是 brotli 这个库,那只能换个库了... |
我这边试一下... |
不是库的原因,原因找到了,是解包时候死循环了 |
handler.go 150L 改成这个试试 case CmdBrotliProto:
msgBody = msgHandler.CmdBrotliProtoDecoder(&wsHeader, msg)
msgHandler.MsgHandler(msgBody)
//cmdHeader = WsHeaderDecoder(msgBody)
//msgHandler.CmdHandler(&cmdHeader, msgBody[:int(cmdHeader.PackageLen)])
//msgBody = msgBody[cmdHeader.PackageLen:]
//
//cmdHeader = WsHeaderDecoder(msgBody)
default:
msgHandler.CmdHandler(&cmdHeader, msgBody[:int(cmdHeader.PackageLen)])
} |
client/handler的这里吗? case CmdBrotliProto:
msgBody = msgHandler.CmdBrotliProtoDecoder(&wsHeader, msg)
cmdHeader = WsHeaderDecoder(msgBody)
for {
msgHandler.CmdHandler(&cmdHeader, msgBody[:int(cmdHeader.PackageLen)])
msgBody = msgBody[cmdHeader.PackageLen:]
if len(msgBody) == 0 {
break
}
cmdHeader = WsHeaderDecoder(msgBody)
} |
我测试一下 |
确实是这里,不会break |
不对,不是这里 |
可以的 |
差不多吧,递归更好看点 |
递归和 while True 循环都有可能消耗大量的 CPU 时间,具体取决于它们的实现方式和使用场景。 递归是一种函数调用自身的方式。如果递归不正确地实现,可能导致无限递归调用,从而消耗大量 CPU 时间,并导致堆栈溢出等问题。因此,在使用递归时,需要谨慎考虑其终止条件,确保递归调用次数有限,不会出现无限循环的情况。 while True 循环是一种无限循环,它会一直执行直到遇到退出循环的条件。如果循环体中没有合适的退出条件,也会导致无限循环,消耗大量 CPU 时间。 在大多数情况下,while True 循环更容易出现 CPU 消耗过高的问题,因为它会一直执行直到遇到退出条件,而递归则会在达到终止条件后结束。但是,如果递归实现得不好,也可能会消耗大量 CPU 时间。 因此,无论是递归还是 while True 循环,都需要谨慎设计和使用,以避免出现性能问题。 chatGPT 回答 |
好的,那提一个pr吧 |
.idea
目录,更换websocket
库 #17 @XiaoMiku01