-
Notifications
You must be signed in to change notification settings - Fork 2.5k
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
我司使用kcp制作上线的网络游戏,出现了比tcp更不稳定的网络状况 #100
Comments
初步估计,因为使用kcp造成了玩家流失和经济损失 |
发在这里,希望大家引以为戒,以免重蹈覆辙。 |
你司CTO可以下岗了 |
建议你们公司不要做大型网络游戏 |
是CTO在技术选型不行以及对KCP驾驭不足的原因吧。目测CTO要背大锅,这就苦了底层打工的劳动人民啊~ |
用kcp成功的项目多的是,你们自己搞不定整套网络集成来怪kcp干嘛?窗口设好了么?参数配对没?发送端用户层流控做了没?大项目?倩女幽魂用kcp传输语音数据,国战40万pcu,不是dau,不比你们项目规模小吧? |
丢包处理幼稚在哪里?能不能具体点?比tcp更丰富的策略到你这里用不来就成幼稚了。 流控出问题了?延迟越来越大了?还是内存越来越大?比如: 这些问题我在issue里回答过好几次了,你们这么大的项目上线不读读wiki和issue?即便不读,但凡有点基础知识都不会犯这种乱用的错误。 大项目?损失上千万? 这么大项目上线前不做重复压力测试?什么问题非要正式推广让用户当小白才能暴露。 |
这种问题还是压力测试测试出来的吗? |
压力测试为什么做不出来?你们模拟丢包了没?模拟延迟了么?这两项模拟了能帮你们找出多少问题?如果不模拟基本等于没测试过网络。 |
联通用户应该引导链接联通服务器,电信用户引导链接电信线路服务器,或者都链接到bgp网络上,不要夸网传输,尤其夸网p2p |
你回答的问题是2017年,我们2015年就立项了,投资大几千万,开发两年半。当时模拟并没有发现问题。 |
我们用的腾讯云的环境。 |
我们的核心战斗的所有数据走的是kcp,而且是fps的实时战斗。玩家反馈经常出现10秒钟,服务器不响应任何操作。用来聊天的tcp连接保持正常,战斗的kcp没响应了。 |
nodelay打开了么?窗口大小根据你们的流量重新设置过没?缓存积累有处理么?默认的类tcp流控关掉没?只要用对了,你们这点战斗数据根本不算啥,好些产品和cdn用kcp传高清视频,比你们流量大吧? |
fps游戏数据要求的是实时,跟流量无关,我这边tcp 80ping,同时的kcp响应时间是180ms |
肯定用的有问题啊,你的参数怎么设的,网络层怎么调用的? |
楼上这帮。。只能编辑一下了。 |
建议你司直接付个几百万将韦先生请去调试,不是什么事情都解决了嘛。 |
问题解决了,kcp就没想过ack包丢了会发生什么吗?一个udp报文里面带的ack个数可是不少的,当环境稳定丢包的时候,这个udp包一丢,直接堵发送缓冲区。。而且rto_max默认是60秒。。 |
对kcp而言ack确认包丢失的问题不解决,在网络游戏的控制指令的传输,不建议用kcp来做。 |
一个udp报文里面的ack有可能会很多。丢了就是阻塞一大堆。tcp丢ack是一个一个丢的,kcp丢一个有可能翻一车,好几百个ack就没了。。这好几百个发送报文就堆在发送缓冲区里面了。 |
小概率事件大量重复就会发生,比如1%的丢包的情况下,玩家玩一天,遇到一次网络正常情况下的莫名断线,就会认为服务器网络不好的。 |
@hubinix 我想知道最终怎么解决问题的 |
加入udt的Ack2机制,给确认包发确认包。。 |
何不如直接 UDT 呢 , 各种重复造轮子 大把视频传输项目用的UDT 好的很~ |
已经上线的游戏了,不敢动太多。 |
突然想到换udt不是换包的问题。。整个网络底层不知道会发生什么。。因为可能session机制也要改。 |
你在这抱怨解决不了问题 付费咨询韦先生不更快解决问题么 |
你们项目挣钱,我不会要你们一分;有问题我可以给你付费电话解答,或者到贵公司提供相关方面的交流和讲座;你也可以在 github 上提问题,我会免费给你用文字解答。 但是如果你既不想花钱,又想通过抹黑本项目的方式来逼我来为你们提供各种大力支持,我会马上在 github 上将你屏蔽掉。你自己项目出了问题,有压力可以理解,来 github 我也能无偿为你解答,但有问题说问题,你要因为自己能力不足被老大骂了,在公司背了锅了,要来我这里抹黑 kcp 解气,还到我其他 issue 里上串下跳的说各种,那么对不起,再有下次我也马上拖黑。 再来说说你的画色舔足,ACK2模式,UDT 的 ACK2 模式,多年前我自己的实验中就被 KCP击败了,asio-kcp 的作者 zhangyun 后面同样再现了这个实验结果,并把他的测试代码和数据都放到了网上。 KCP 的代码你都没读通就自作聪明的加了 ACK2,我只能告诉你,你这样很危险,本身用法问题不正确,KCP的性能被你阻碍了,自己加个 ACK2,是丢了西瓜捡了颗芝麻。 还有你所谓的 “tcp丢ack是一个一个丢的,kcp丢一个有可能翻一车,好几百个ack就没了”? 用不着你教我 TCP是怎么样,因为你不管对 TCP 还是 KCP 都只是一知半解,我 2011年设计 KCP协议之前,已经实现过 5 套不同方向的传输协议,包括反照 BSD 4.4 Lite 完整的类 TCP实现,我当然知道 TCP是什么样子,也读过各种论文和类似 libenet, raknet, libjingle 之类的传输实现,不然后续谈何改进,所以不要以为这些实现和参数都是我拍拍脑袋弄出来的。 你以为 KCP的丢包确认只靠 ACK?naive ,你没看到 UNA 这个东西的存在么?TCP只有 UNA,KCP是 ACK + UNA,丢几个 ACK包根本不在乎,UNA立马补充掉,UNA是写在包头的,你每个数据包或者ACK包都包含该数据 ,相互补充和支持的机制,丢了 UNA也有 ACK来补充,此外还有 fastack 来应对ack丢失,所以说你看了半天就压根没看懂,还想当然的觉得问题在哪里。 另,我一再强调的缓存积累延迟,你到底处理了没有?没处理的话,读读下面的 wiki: 我不管你现在改成什么样子了,我就问问你关于当初版本的几个问题:
做完上面这 8 项再来提 KCP的问题,你如果代码没问题,的确处理好了上面 8个需要注意的地方,获得一个比 tcp 快一倍的传输性能是很轻松的事情,进一步你还可以给 kcp 配套 fec 系统,获得更快的传输性能。 这些问题,但凡有点网络常识,或者扫过一遍 issue 或者 wiki 的都不会犯,你能不能说说你们上线的版本是不是这些问题都有注意到并考虑周全了? |
本来解决问题就没需要你的支持,如果以为我是为了寻求支持来这里发言就把我屏蔽,那么说你的气量也就这么多。 |
不要解决不了问题,就把提出问题的人解决掉。。 |
我上面的问题你都没本事回答呢,就来这乱喷。你到现在都没看懂,还没意识到自己的观点错在哪里,KCP单纯靠ACK?UNA 是用来干嘛的?你把ack全丢了una都可以照样工作完成确认的事情,上面都有人说了,要不要帮你百度一下?你到现在都还以为KCP光靠ACK?你确定自己知道TCP的ack具体怎么回事么?所以我才说你是一知半解。 |
大哥,没有谁天生有义务为你解决问题,而且还是这种看不懂的问题。 |
技术选型前的评估/测试根本没作到位( 可能没作过商用环境下的对比测试, 至少是移动端的典型商用环境下没作充分测试..................), 出了问题来责怪开源作者, 这样的" issue " 让人无语了............. |
真是无语,人家也没收你钱啊。这个价值观真是让人语塞 |
你可真是丢人丢到家了。 |
时隔多年,我也想问这个CTO就是你自己吧? |
有没有可能是运营商qos了你的udp |
客观点, 如果使用KCP需要很深的网络底层知识, 需要自己处理很多底层问题, 一般项目还是不要用了, 也用不着冷嘲热讽人家, 人家是实际使用kcp遇到的问题, 如果实际使用会遇到这些问题, 应该考虑怎么让大家更少频次的碰到, 降低使用难度, 更利于推广. 不要动不动吹嘘自己的技术多牛, 人家多蠢, 你专精于网络, 这方面你强一点, 有啥呢? |
也不知道是不是故意高深, 你能把别人想的哦醋, 也能这么认为你自己, 故意留点不到位, 好拿咨询费吗? |
@weatune 咨询费个屁,这个项目从发布到现在我就没收过一分钱咨询费,我又不靠这个挣钱,也从来不打算靠这个项目挣啥钱,issue 里正常问问题,比这复杂疑难的,所有我都解答,我是看不惯有些人自己不懂,态度还扭曲,好好问问题不肯,上来就抹黑的行为,挣个屁的咨询费啊,你自己心理龌龊,看所有人都是龌龊。 我业余时间维护,该写的文档写了,该回答的问题也回答了,开源项目,不欠任何人什么,别天天一副巨婴嘴脸,不把东西喂到嘴里还撒娇。 |
你自己把别人想的阴暗啊, 老哥, 说别人摸黑你, 是为了逼你技术支持, 这是原话啊, 你自己不成熟啊, 还别人巨婴. 直接回他, 底层包没处理好, 就是喽. |
客观点,没点实力老实用tcp不就好了,喜欢套个壳说自研就算了,自己掌控不了还非要怨天怨地,自己心里没点数能行么? |
也就得亏你写的是中文,从这条 issue 开始就不受任何开发待见。有时候我也在想一件事,为什么用别人的东西获得的所有成功都是自己的,但当出问题时第一时间想到的一定是别人的? 哪怕退一万步说,从评审落地的那一刻起,所有结果都应只与自己有关。这是我们平时告诫下面每一位 |
在此我补充几个问题:
几千万的项目应该能做好这些基本工作吧? |
我已经说了,但凡他好好问问题,比这复杂的情况我都会回答,你去翻翻 issue 里其他正常问题,但如果上来就乱喷,指望我帮你解决问题,对不起,即便答案只有一个 hello world 我都懒得说。 你就是巨婴啊,话都看不懂,说话做事,总觉得全世界所有人都欠你一样, 拉黑不送。 |
我也没有看懂 一个牛逼的过万star的开源项目 自己没看懂源码和文档 出了线上事故 来这里bb叨 是为了什么 是为了找喷吗? 还在这个帖子下面 持续了那么久时间 也是醉了 |
强烈建议大型网络游戏公司不要考虑使用kcp的协议。
kcp在流控和丢包处理方面,实现的太过于幼稚。
The text was updated successfully, but these errors were encountered: