Skynet扯淡大雜燴
第一棵蛋
--skynet.raw_dispatch_message -- 每個消息都創建一個coroutine local co = co_create(f) suspend(co, coroutine.resume(co, session,source, p.unpack(msg,sz, ...)))
一對好基友
call和response是一對好基友,服務A 調用call方法到服務B后, 服務B要應答時調用response+結果R即可,這個時候服務A中的call返回,返回就是結果R.再一對好基友
resume和yield也是一對好基友。reume和yield分別在2個代碼快A和B中。協程穿越者W是一個隱形的碼靈,它按順序一行一行的執行當前lua代碼,在A和B代碼塊中來回穿針引線。碼靈不是時空跳躍者,它只是穿行,不會在某處就消失掉。 它要么在代碼塊A中,要么就在代碼塊B中,每次穿越,嘴里都銜著上一個時空的口袋(實參),丟到當前的時空。當然口袋里可能是空的。
這淡扯得有點離譜啊!
rapidjson來一蛋
先在skynet里這樣定義一個table-------------------------------------------------
{ { id = 1, name = "map1", ip = "127.0.0.1", port = "5555" }, { id = 2, name = "map2", ip = "127.0.0.2", port = "5556" }, }然后在client這樣解析:
-------------------------------------------------
Document document; document.Parse(params.c_str()); if(!document.HasMember("maps")) return; Value map = document["maps"].GetObject(); for(Value::ConstMemberIterator itr = map.MemberBegin(); itr != map.MemberEnd(); ++itr) { }問題來了:
1.只能解析到id=2的table出來
2.再追加個id=3,就地址異常了。
解決
ID從0開始這蛋甚是無味
好像是sproto中如果type被用作數組類型,必須第一個字段是id,后面填充的時候也要從0開始