實(shí)現(xiàn)RPC框架(一) - golang socket通訊

說點(diǎn)廢話:
如今RPC框架有很多種,你使用他的時(shí)候并不需要了解他的實(shí)現(xiàn)方式,甚至當(dāng)我第一次用RPC框架的時(shí)候我連TCP和HTTP都分不清楚。但用了就得知道怎么回事,還是來了解一下RPC框架的原理是什么樣的,最好是去自己實(shí)現(xiàn)一下。

那么最開始的思路是這樣:RPC可以基于TCP、HTTP、UDP,基于TCP是通過socket鏈接進(jìn)行傳輸,通過傳輸定義的方法名和類型,再在client端進(jìn)行動態(tài)代理(golang是通過反射[1])去調(diào)用相關(guān)方法。
https://github.com/SmarkSeven/socket
大佬寫的很好,可以去看一下。

對于HTTP也有不一樣的好處,如鑒權(quán),代理,和普及的廣泛性,
https://blog.csdn.net/hengyunabc/article/details/81120904
這邊是一篇對于gRPC為什么基于HTTP2的思考

UDP…

總體來說各有利弊,那么對于自己實(shí)現(xiàn)來說還是先從TCP來考慮。


先說對于每一個(gè)服務(wù)端的邏輯

node/main.go

func main() {

    //1.注冊service
    server := server.NewRPCService(server.RPCServiceMap{"stest": ""})

    //2.加密方式

    //3.服務(wù)初始化
    server.InitRPCServer(":8081")

    //4.啟動服務(wù)
    server.Run()

    //5.長連接注冊

    //6.查找注冊鏈接的節(jié)點(diǎn),并進(jìn)行通訊
}

注[1] :Go - 反射中 函數(shù) 和 方法 的調(diào)用 - v.Call()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容