金慶的專欄
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无码专区首JN
|
99久久精品国产一区二区蜜芽
|
人妻精品久久无码专区精东影业
|
久久人人爽人人人人片av
|
97精品依人久久久大香线蕉97
|
久久精品无码午夜福利理论片
|
久久综合久久综合久久
|
蜜臀久久99精品久久久久久
|
囯产精品久久久久久久久蜜桃
|
精品久久久久香蕉网
|
亚洲国产成人久久综合碰
|
久久狠狠高潮亚洲精品
|
国产精品久久久亚洲
|
精品国产乱码久久久久久浪潮
|
综合久久精品色
|
久久国产精品久久精品国产
|
亚洲国产精品成人久久蜜臀
|
久久国产高潮流白浆免费观看
|
久久www免费人成精品香蕉
|
久久久免费精品re6
|
久久久久青草线蕉综合超碰
|
久久99热精品
|
久久天天躁狠狠躁夜夜avapp
|
久久无码AV中文出轨人妻
|
久久99精品国产99久久
|
久久男人Av资源网站无码软件
|
亚洲欧美日韩精品久久亚洲区
|
久久这里只有精品首页
|
99久久综合狠狠综合久久止
|
亚洲av伊人久久综合密臀性色
|
亚洲精品NV久久久久久久久久
|
av无码久久久久不卡免费网站
|
久久久久久久免费视频
|
精品多毛少妇人妻AV免费久久
|
国产精品久久久福利
|
国产精品久久久久久吹潮
|
久久综合亚洲欧美成人
|
人妻无码αv中文字幕久久
|
亚洲av伊人久久综合密臀性色
|
麻豆精品久久精品色综合
|