GOLANG使用THRIFT的鑒權(quán)和多路復(fù)用 www. 編輯:kp12345 來(lái)源:轉(zhuǎn)載 本文章來(lái)為各位介紹一篇關(guān)于GOLANG使用THRIFT的鑒權(quán)和多路復(fù)用,,希望此文章能夠幫助到各位朋友。
最近梳理公司的服務(wù)時(shí),,決定把基礎(chǔ)組件抽離出來(lái)服務(wù)化,。因?yàn)楣纠镉卸喾N語(yǔ)言開發(fā)的服務(wù),決定使用thrift來(lái)解決跨語(yǔ)言通訊,。
啟動(dòng)一個(gè)server
thrift對(duì)golang的支持已經(jīng)很好了,,官方包里提供了一個(gè)server基類和一個(gè)簡(jiǎn)單服務(wù)simple_server.go.自己可以實(shí)現(xiàn)server來(lái)做鑒權(quán)和其它統(tǒng)計(jì)操作.
server定義了一個(gè)TServer接口和一些方法,源碼如下:
type TServer interface {
ProcessorFactory() TProcessorFactory //服務(wù)
ServerTransport() TServerTransport //連接
InputTransportFactory() TTransportFactory //輸入
OutputTransportFactory() TTransportFactory //輸出
InputProtocolFactory() TProtocolFactory //協(xié)議
OutputProtocolFactory() TProtocolFactory //協(xié)議
// Starts the server
Serve() error
// Stops the server. This is optional on a per-implementation basis. Not
// all servers are required to be cleanly stoppable.
Stop() error
}
Server方法進(jìn)行監(jiān)聽,接受請(qǐng)求,調(diào)度處理.下面是simple_server.go的Server方法.
func (p *TSimpleServer) Serve() error {
err := p.Listen()
if err != nil {
return err
}
p.AcceptLoop()
return nil
}
func (p *TSimpleServer) AcceptLoop() error {
for {
client, err := p.serverTransport.Accept()
if err != nil {
select {
case <-p.quit:
return nil
default:
}
return err
}
if client != nil {
go func() {
if err := p.processRequests(client); err != nil {
log.Println("error processing request:", err)
}
}()
}
}
}
只要自己實(shí)現(xiàn)相關(guān)接口方法,在方法中就可以進(jìn)行相關(guān)鑒權(quán)/統(tǒng)計(jì)等處理了。
關(guān)于多路復(fù)用idl寫法的問(wèn)題
golang的多路復(fù)用是要把service寫在一個(gè)idl文件里的,,而java就不需要,。這個(gè)在剛開始的時(shí)候耽誤了點(diǎn)時(shí)間。
|