皮皮网

【instrumentation 源码】【裂变黑技术源码】【php源码免费商用】mdns 源码

2024-12-26 00:35:03 来源:电流为漩涡源码

1.了解go-micro中的transport
2.VB 修改 IP地地址
3.Network Service Discovery - mDNS-SD

mdns 源码

了解go-micro中的transport

       è¿™ç¯‡æ–‡ç« ä»‹ç»çš„transport不是我们学习的重点,因为你可能用不到他,但是作为学习go-micro的一部分,还是得提一下。

       transport用于服务间通信,基于socket的send/recv语义。其接口的方法集如下:

typeTransportinterface{ Init(...Option)errorOptions()OptionsDial(addrstring,源码instrumentation 源码opts...DialOption)(Client,error)Listen(addrstring,opts...ListenOption)(Listener,error)String()string}var(DefaultTransportTransport=NewHTTPTransport()DefaultDialTimeout=time.Second*5)

       ä¸»è¦çš„作用体现在Dial和Listen方法中,

func(h*/asim/go-micro/examples/v3/greeter/srv/proto/hello""github.com/asim/go-micro/v3""github.com/asim/go-micro/v3/util/log""google.golang.org/grpc")typeSaystruct{ }func(s*Say)Hello(ctxcontext.Context,req*hello.Request,rsp*hello.Response)error{ log.Log("ReceivedSay.Hellorequest")rsp.Msg="Hello"+req.Namereturnnil}funcmain(){ gofunc(){ for{ grpc.DialContext(context.TODO(),".0.0.1:")time.Sleep(time.Second)}}()service:=micro.NewService(micro.Name("go.micro.srv.greeter"),)//optionallysetupcommandlineusageservice.Init()//RegisterHandlershello.RegisterSayHandler(service.Server(),new(Say))//Runserveriferr:=service.Run();err!=nil{ log.Fatal(err)}}

       æœ‰å…³æœåŠ¡é—´é€šä¿¡ä½¿ç”¨çš„proto结构体

syntax="proto3";packagego.micro.srv.greeter;serviceSay{ rpcHello(Request)returns(Response){ }}messageRequest{ stringname=1;}messageResponse{ stringmsg=1;}

       å¯åŠ¨æœåŠ¡çš„时候,通过日志输出,可以大致的了解启动过程

--::file=v3@v3.5.2-0.-cbbbc/service.go:level=infoStarting[service]go.micro.srv.greeter--::file=server/rpc_server.go:level=infoTransport[/android/server/NsdService.java

        这里有两个重要方法:

        frameworks/base/services/core/java/com/android/server/NsdService.java

        要执行之,首先需要执行 的初始化

        // 初始化过程先不分析了,结论是作为 client 端连接一个 socket 到 server端(netd)

        与前文分析相同,以 “mdnssd” 为命令,以 “discover”、discoveryId、serviceType 作为参数列表

        system/netd/server/main.cpp

        system/core/libsysutils/src/SocketListener.cpp

        onDataAvailable() 方法的具体实现在 SocketListener 子类 FrameworkListener 中

        system/core/libsysutils/include/sysutils/FrameworkListener.h

        先确定 mCommand 集合里有什么,才能确定具体执行的 runCommand() 方法是什么

        system/netd/server/MDnsSdListener.cpp

        从以上源码可知,注册的命令是 “mdnssd”,与前文的客户端匹配

        具体命令的处理过程如下,前文提到了 discover 和 start-service 两个操作,这里仅分析 discover 命令

        external/mdnsresponder/mDNSShared/dnssd_clientstub.c