金慶的專欄
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è)
公告照片
搜索
積分與排名
積分 - 656585
排名 - 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ò)誤(11032)
2.?SVN中邪惡的replace(10955)
3.?VS2005編譯libevent(10413)
4.?混音算法的學(xué)習(xí)與研究(10203)
5.?C調(diào)用lua腳本的效率測試(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)
grpc-go與actor模式
grpc-go與actor模式
(金慶的專欄 2018.6)
grpc-go服務(wù)器的每個(gè)請(qǐng)求都在一個(gè)獨(dú)立的協(xié)程中執(zhí)行。
網(wǎng)游服務(wù)器中,一般請(qǐng)求會(huì)調(diào)用游戲房間的方法,而房間是一個(gè)獨(dú)立的協(xié)程。
可以將房間實(shí)現(xiàn)為actor,grpc請(qǐng)求通過Call()或Post()方法來執(zhí)行。
其中Call()會(huì)等待返回,而Post()會(huì)異步執(zhí)行無返回值。
type Room struct {
// actC 是其他協(xié)程向Room協(xié)程發(fā)送動(dòng)作的Channel,協(xié)程中將依次執(zhí)行動(dòng)作。
// Action 動(dòng)作, 是無參數(shù)無返回值的函數(shù).
actC chan func()
...
}
// Run 運(yùn)行房間協(xié)程.
func (r *Room) Run() {
ticker := time.NewTicker(20 * time.Millisecond)
defer ticker.Stop()
for r.running {
select {
case act := <-r.actC:
act()
case <-ticker.C:
r.tick()
}
}
}
// Call calls a function f and returns the result.
// f runs in the Room's goroutine.
func (r *Room) Call(f func() interface{}) interface{} {
// 結(jié)果從ch返回
ch := make(chan interface{}, 1)
r.actC <- func() {
ch <- f()
}
// 等待直到返回結(jié)果
return <-ch
}
// Post 將一個(gè)動(dòng)作投遞到內(nèi)部協(xié)程中執(zhí)行.
func (r *Room) Post(f func()) {
r.actC <- f
}
grpc服務(wù)方法如:
func (m *RoomService) Test(ctx context.Context, req *pb.TestReq) (*pb.TestResp, error) {
conn := conn_mgr.GetConn(ctx)
if conn == nil {
return nil, fmt.Errorf("can not find connection")
}
room := conn.GetRoom()
resp := room.Call(func() interface{} {
return room.Test(req)
})
return resp.(*pb.TestResp), nil
}
posted on 2018-06-12 11:15
金慶
閱讀(837)
評(píng)論(0)
編輯
收藏
引用
所屬分類:
9. 其它
、
3. Golang
只有注冊(cè)用戶
登錄
后才能發(fā)表評(píng)論。
【推薦】100%開源!大型工業(yè)跨平臺(tái)軟件C++源碼提供,建模,組態(tài)!
相關(guān)文章:
TortoiseGit is OK but GitExtensions fails
DeathVoteExpirationTimeout in Orleans
How to delete local branches of GitExtension
Clustering provider in Orleans
Why Orleans' actor is virutal
What comes after microservice?
Rust Deref coercion example
Rust Error Return Check Policy
Rust visibility
Why does Rust check borrow even in single thread
網(wǎng)站導(dǎo)航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
Powered by:
C++博客
Copyright © 金慶
色综合色天天久久婷婷基地
|
久久精品国产一区二区三区不卡
|
久久久噜噜噜久久中文字幕色伊伊
|
中文精品99久久国产
|
狠狠精品久久久无码中文字幕
|
国产高潮国产高潮久久久91
|
亚洲人成无码久久电影网站
|
色婷婷久久综合中文久久蜜桃av
|
久久最近最新中文字幕大全
|
国产成人无码久久久精品一
|
久久久久这里只有精品
|
久久久久亚洲AV无码永不
|
污污内射久久一区二区欧美日韩
|
久久精品国产亚洲AV无码麻豆
|
九九久久精品国产
|
久久91精品国产91久久麻豆
|
亚洲国产精品一区二区久久hs
|
国産精品久久久久久久
|
久久久婷婷五月亚洲97号色
|
欧美精品乱码99久久蜜桃
|
97超级碰碰碰碰久久久久
|
久久人人爽爽爽人久久久
|
99久久国产精品免费一区二区
|
久久狠狠一本精品综合网
|
国产精品无码久久综合网
|
久久电影网一区
|
久久伊人精品青青草原高清
|
久久久国产乱子伦精品作者
|
亚洲AV无码成人网站久久精品大
|
久久久精品国产Sm最大网站
|
国产精品一区二区久久精品
|
国产综合久久久久久鬼色
|
人妻无码αv中文字幕久久
|
久久精品人妻中文系列
|
一本色道久久综合亚洲精品
|
奇米影视7777久久精品人人爽
|
久久久这里有精品
|
综合久久精品色
|
伊人久久综合成人网
|
浪潮AV色综合久久天堂
|
99久久精品午夜一区二区
|