金慶的專欄
C++博客
::
首頁
::
新隨筆
::
聯(lián)系
::
聚合
::
管理
::
423 隨筆 :: 0 文章 :: 454 評(píng)論 :: 0 Trackbacks
公告
我的隨筆
我的評(píng)論
我參與的隨筆
留言簿
(12)
給我留言
查看公開留言
查看私人留言
隨筆分類
(502)
1. C/C++(166)
(rss)
2. 網(wǎng)游開發(fā)(108)
(rss)
3. Golang(20)
(rss)
4. Linux/Unix(30)
(rss)
5. 軟工與管理(44)
(rss)
6. Python(23)
(rss)
7. Erlang(18)
(rss)
8. Rust(16)
(rss)
9. 其它(77)
(rss)
隨筆檔案
(423)
2023年1月 (1)
2022年11月 (1)
2022年10月 (2)
2022年9月 (1)
2022年4月 (6)
2022年1月 (2)
2021年12月 (4)
2021年11月 (6)
2021年10月 (2)
2021年9月 (2)
2021年8月 (7)
2021年7月 (2)
2021年5月 (2)
2021年3月 (1)
2021年2月 (2)
2021年1月 (1)
2020年12月 (1)
2020年10月 (1)
2020年9月 (5)
2020年8月 (1)
2020年7月 (1)
2020年6月 (1)
2020年4月 (2)
2020年3月 (3)
2020年2月 (3)
2020年1月 (1)
2019年12月 (1)
2019年9月 (2)
2019年4月 (2)
2019年1月 (1)
2018年12月 (1)
2018年11月 (3)
2018年10月 (1)
2018年9月 (3)
2018年8月 (3)
2018年7月 (2)
2018年6月 (4)
2018年5月 (4)
2018年4月 (4)
2018年3月 (1)
2018年1月 (2)
2017年12月 (2)
2017年11月 (3)
2017年10月 (3)
2017年8月 (7)
2017年7月 (1)
2017年6月 (1)
2017年5月 (3)
2017年4月 (3)
2017年3月 (3)
2017年2月 (2)
2017年1月 (2)
2016年12月 (5)
2016年11月 (2)
2016年10月 (2)
2016年9月 (1)
2016年8月 (6)
2016年7月 (3)
2016年6月 (2)
2016年5月 (4)
2016年4月 (2)
2016年3月 (2)
2016年1月 (3)
2015年12月 (2)
2015年11月 (2)
2015年10月 (1)
2015年8月 (2)
2015年7月 (1)
2015年6月 (1)
2015年5月 (4)
2015年4月 (3)
2015年3月 (4)
2015年2月 (5)
2015年1月 (4)
2014年12月 (3)
2014年11月 (3)
2014年10月 (2)
2014年9月 (3)
2014年8月 (1)
2014年4月 (4)
2014年3月 (1)
2014年2月 (4)
2014年1月 (5)
2013年12月 (5)
2013年11月 (5)
2013年9月 (2)
2013年8月 (2)
2013年7月 (2)
2013年6月 (2)
2013年5月 (1)
2013年1月 (2)
2012年12月 (1)
2012年11月 (1)
2012年9月 (1)
2012年8月 (3)
2012年7月 (2)
2012年6月 (1)
2012年4月 (3)
2012年3月 (2)
2012年2月 (3)
2012年1月 (2)
2011年11月 (2)
2011年10月 (3)
2011年9月 (2)
2011年8月 (2)
2011年7月 (3)
2011年6月 (2)
2011年5月 (3)
2011年1月 (2)
2010年12月 (1)
2010年11月 (2)
2010年10月 (2)
2010年9月 (3)
2010年8月 (2)
2010年7月 (3)
2010年6月 (1)
2010年5月 (3)
2010年4月 (3)
2010年3月 (5)
2010年2月 (4)
2010年1月 (4)
2009年12月 (2)
2009年11月 (3)
2009年10月 (4)
2009年9月 (3)
2009年8月 (2)
2009年7月 (4)
2009年6月 (1)
2009年5月 (3)
2009年4月 (4)
2009年3月 (2)
2009年2月 (5)
2009年1月 (1)
2008年12月 (7)
2008年11月 (4)
2008年10月 (1)
2008年9月 (3)
2008年8月 (4)
2008年7月 (3)
2008年6月 (4)
2008年5月 (6)
2008年4月 (7)
2008年3月 (6)
2008年1月 (5)
2007年12月 (7)
2007年11月 (4)
2007年10月 (5)
2007年9月 (6)
2007年8月 (8)
2007年7月 (5)
相冊(cè)
公告照片
搜索
積分與排名
積分 - 656583
排名 - 25
最新評(píng)論
1.?re: boost::asio::spawn 將一統(tǒng)C++網(wǎng)絡(luò)庫(kù)
asio 成為C++首選網(wǎng)絡(luò)庫(kù)
--linda
2.?re: log4cxx中文輸出錯(cuò)誤補(bǔ)丁
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--金慶
3.?re: mingw編譯OrzNet
能發(fā)送一個(gè)mingw編譯好的OrzNet庫(kù)給我嗎? liuweiqcxy@163.com
謝謝!
--劉威
4.?re: log4cxx中文輸出錯(cuò)誤補(bǔ)丁
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--bigbad
5.?re: log4cxx中文輸出錯(cuò)誤補(bǔ)丁
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--bigbad
閱讀排行榜
1.?"multiple definition of" 錯(cuò)誤(11032)
2.?SVN中邪惡的replace(10955)
3.?VS2005編譯libevent(10413)
4.?混音算法的學(xué)習(xí)與研究(10203)
5.?C調(diào)用lua腳本的效率測(cè)試(9007)
評(píng)論排行榜
1.?VC6正在被拋棄(35)
2.?VS2005編譯libevent(21)
3.?"multiple definition of" 錯(cuò)誤(18)
4.?C++引用優(yōu)于指針(17)
5.?ACE與ASIO之間關(guān)于Socket編程的比較(16)
rpc應(yīng)答太快造成請(qǐng)求超時(shí)
rpc應(yīng)答太快造成請(qǐng)求超時(shí)
(金慶的專欄 2020.9)
在壓測(cè)中發(fā)現(xiàn)總有幾個(gè)請(qǐng)求超時(shí),超時(shí)時(shí)長(zhǎng)設(shè)大也會(huì)有,而成功的請(qǐng)求延時(shí)遠(yuǎn)小于超時(shí)時(shí)間。
查錯(cuò)的第一方向是查網(wǎng)絡(luò)庫(kù)中有消息丟失。
跟蹤所有消息,發(fā)現(xiàn)超時(shí)的消息應(yīng)該是正常處理并返回了。
于是查接收應(yīng)答消息后的處理,最終找到代碼:
```go
func (c *Client) onRpcRet(cbIndex uint32, ...) {
ii, ok := c.callbacks.Load(cbIndex)
if !ok {
// logger.Errorf("onRpcRet can not find cbIndex %d", cbIndex) // 可能是超時(shí)已刪
return
}
```
打開日志,發(fā)現(xiàn)超時(shí)的請(qǐng)求對(duì)應(yīng)有該條錯(cuò)誤日志。
此處回調(diào)不存在的情況,正常是先超時(shí)刪除回調(diào),然后再收到應(yīng)答。
現(xiàn)在是先收到了應(yīng)答,發(fā)現(xiàn)找不到回調(diào),然后過了一段時(shí)間會(huì)被判為超時(shí)無響應(yīng)。
將下面代碼換個(gè)次序就好了:
```go
if err := c.Session.Send(msg); err != nil {
...
return
}
c.callbacks.Store(cbIndex, ...)
```
改為
```go
// 必須先設(shè)回調(diào),然后發(fā)送,因?yàn)閼?yīng)答可能會(huì)很快
c.callbacks.Store(cbIndex, ...)
if err := c.Session.Send(msg); err...
```
壓測(cè)時(shí)因?yàn)榧訅簷C(jī)CPU是滿負(fù)載運(yùn)轉(zhuǎn),所以 Send() 和 Store() 之間可能會(huì)間隔數(shù)毫秒,
足夠 rpc 請(qǐng)求處理完成并返回,而應(yīng)答返回時(shí)回調(diào)還沒設(shè)置。
先 Send() 后 Store() 寫代碼會(huì)稍微簡(jiǎn)單點(diǎn),因?yàn)?Send() 失敗后可以直接返回。
先 Store() 后 Send() 時(shí),Send() 失敗則需要相應(yīng) Delete().
posted on 2020-09-17 15:59
金慶
閱讀(501)
評(píng)論(0)
編輯
收藏
引用
所屬分類:
2. 網(wǎng)游開發(fā)
、
3. Golang
只有注冊(cè)用戶
登錄
后才能發(fā)表評(píng)論。
【推薦】100%開源!大型工業(yè)跨平臺(tái)軟件C++源碼提供,建模,組態(tài)!
相關(guān)文章:
How are dtLinks created in NavMesh
UE4 Blueprint Multiple Event BeginPlay
第9代游戲主機(jī)
Canvas Scaler 的3種模式
幀同步是否允許客戶端指定命令幀號(hào)
rpc應(yīng)答太快造成請(qǐng)求超時(shí)
測(cè)試 tolua 例子 TestErrorStack
lua變量缺少local造成unity死鎖
C# tolua 之間互傳 byte[]
Unity使用異步grpc
網(wǎng)站導(dǎo)航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
Powered by:
C++博客
Copyright © 金慶
亚洲国产精品久久久久
|
国产精品久久亚洲不卡动漫
|
久久夜色精品国产噜噜噜亚洲AV
|
日本国产精品久久
|
四虎影视久久久免费
|
99久久国产免费福利
|
亚洲国产精品久久久久网站
|
国产精品无码久久综合
|
久久精品国产亚洲精品
|
欧美精品国产综合久久
|
久久午夜夜伦鲁鲁片免费无码影视
|
狼狼综合久久久久综合网
|
亚洲äv永久无码精品天堂久久
|
亚洲中文久久精品无码ww16
|
久久精品国产精品亚洲人人
|
91久久精品视频
|
久久综合九色综合欧美就去吻
|
思思久久99热只有频精品66
|
亚洲国产欧美国产综合久久
|
色综合合久久天天综合绕视看
|
久久青青草视频
|
色偷偷偷久久伊人大杳蕉
|
AV色综合久久天堂AV色综合在
|
久久国产精品久久
|
少妇久久久久久被弄高潮
|
国产成人无码久久久精品一
|
青青青伊人色综合久久
|
久久久久亚洲精品天堂久久久久久
|
国产69精品久久久久观看软件
|
久久A级毛片免费观看
|
亚洲欧洲日产国码无码久久99
|
国产精品9999久久久久
|
久久精品国产精品亚洲人人
|
成人久久免费网站
|
国内精品久久久久久久亚洲
|
久久受www免费人成_看片中文
|
色综合久久久久无码专区
|
成人午夜精品久久久久久久小说
|
久久99热只有频精品8
|
久久久久99精品成人片牛牛影视
|
久久丫精品国产亚洲av不卡
|