金慶的專欄
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è)
公告照片
搜索
積分與排名
積分 - 654306
排名 - 25
最新評(píng)論
1.?re: boost::asio::spawn 將一統(tǒng)C++網(wǎng)絡(luò)庫
asio 成為C++首選網(wǎng)絡(luò)庫
--linda
2.?re: log4cxx中文輸出錯(cuò)誤補(bǔ)丁
評(píng)論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
--金慶
3.?re: mingw編譯OrzNet
能發(fā)送一個(gè)mingw編譯好的OrzNet庫給我嗎? liuweiqcxy@163.com
謝謝!
--劉威
4.?re: log4cxx中文輸出錯(cuò)誤補(bǔ)丁
評(píng)論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
--bigbad
5.?re: log4cxx中文輸出錯(cuò)誤補(bǔ)丁
評(píng)論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
--bigbad
閱讀排行榜
1.?"multiple definition of" 錯(cuò)誤(11017)
2.?SVN中邪惡的replace(10939)
3.?VS2005編譯libevent(10405)
4.?混音算法的學(xué)習(xí)與研究(10184)
5.?C調(diào)用lua腳本的效率測(cè)試(9003)
評(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í)長設(shè)大也會(huì)有,而成功的請(qǐng)求延時(shí)遠(yuǎn)小于超時(shí)時(shí)間。
查錯(cuò)的第一方向是查網(wǎng)絡(luò)庫中有消息丟失。
跟蹤所有消息,發(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
金慶
閱讀(498)
評(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 © 金慶
一级女性全黄久久生活片免费
|
久久A级毛片免费观看
|
久久99久久99精品免视看动漫
|
久久久久97国产精华液好用吗
|
77777亚洲午夜久久多喷
|
久久综合九色综合网站
|
免费一级欧美大片久久网
|
久久精品亚洲欧美日韩久久
|
久久久久亚洲精品无码网址
|
日本欧美国产精品第一页久久
|
久久综合精品国产一区二区三区
|
日韩十八禁一区二区久久
|
亚洲а∨天堂久久精品
|
国产精品久久久久久五月尺
|
伊人久久大香线蕉av不卡
|
久久精品国产亚洲AV麻豆网站
|
国产叼嘿久久精品久久
|
国产精品欧美久久久久天天影视
|
久久精品国产第一区二区
|
久久免费视频6
|
亚洲午夜久久久久久噜噜噜
|
国内精品久久人妻互换
|
国内精品久久久久久中文字幕
|
久久久精品久久久久特色影视
|
国内精品伊人久久久久妇
|
jizzjizz国产精品久久
|
激情久久久久久久久久
|
亚洲中文久久精品无码ww16
|
久久精品欧美日韩精品
|
91久久成人免费
|
97久久婷婷五月综合色d啪蜜芽
|
久久精品国产亚洲AV无码娇色
|
久久精品国产亚洲一区二区三区
|
久久久精品国产免大香伊
|
情人伊人久久综合亚洲
|
久久久久久久久久久
|
亚洲国产精品久久
|
久久er99热精品一区二区
|
亚洲国产成人久久综合碰
|
久久精品免费一区二区三区
|
久久久久精品国产亚洲AV无码
|