第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

高浪 rpc 得到錯(cuò)誤的結(jié)構(gòu)變量

高浪 rpc 得到錯(cuò)誤的結(jié)構(gòu)變量

Go
拉風(fēng)的咖菲貓 2022-09-12 16:54:39
我在端口號(hào) 8000 和 8100 上注冊(cè)了兩個(gè) RPC 服務(wù),它們分別是服務(wù)器 1 和服務(wù)器 2。然后,我在服務(wù)器 1 端創(chuàng)建了一個(gè) RPC 連接,連接的目標(biāo)是服務(wù)器 2。成功建立連接后,我調(diào)用連接以進(jìn)行遠(yuǎn)程調(diào)用。遠(yuǎn)程呼叫成功,但是當(dāng)我獲得遠(yuǎn)程呼叫的被叫方的端口號(hào)時(shí),有時(shí)我會(huì)得到 server1 的端口號(hào),有時(shí)會(huì)得到 server2 的端口號(hào)。在我的理解中,遠(yuǎn)程調(diào)用的被叫方是serve2,程序應(yīng)該返回server2的端口號(hào)。這是什么原因造成的?我的代碼:package mainimport (    "log"    "net"    "net/rpc"    "sync")type RPCServer struct {    port    string    clients map[string]rpc.Client}type MessageArgs struct {    Sender  string    Message string}type MessageReply struct {    Receive bool}func (rs *RPCServer) SendMessage(args *MessageArgs, reply *MessageReply) error {    log.Printf("current rpc server [%s] Receive Message [%s] from Sender[%s]", rs.port, args.Message, args.Sender)    reply.Receive = true    return nil}func (rs *RPCServer) server(wg *sync.WaitGroup) {    l, e := net.Listen("tcp", rs.port)    if e != nil {        log.Fatal("listen error: ", e)    } else {        log.Printf("server start successfully on port %s\n", rs.port)    }    rpc.Register(rs)    // wait for all server construct but not wait for loop    wg.Done()    for {        conn, err := l.Accept()        if err != nil {            log.Fatal("accept error: ", err)        }        go rpc.ServeConn(conn)    }}func (rs *RPCServer) connect(port string) {    client, err := rpc.Dial("tcp", port)    if err != nil {        log.Fatal("dialing: ", err)    } else {        log.Printf("[%s] server connect other server [%s] successfully.\n", rs.port, port)    }    rs.clients[port] = *client}func main() {    servers := make([]RPCServer, 2)    ports := [2]string{":8000", ":8100"}    for i := range servers {        servers[i].clients = make(map[string]rpc.Client)        servers[i].port = ports[i]    }    // start all rpc server    var wg sync.WaitGroup    for i := 0; i < 2; i++ {        wg.Add(1)        go servers[i].server(&wg)    }
查看完整描述

1 回答

?
守著星空守著你

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超8個(gè)贊

您正在撥打兩次電話:rpc.Register(rs)


向代碼添加錯(cuò)誤檢查:

    err := rpc.Register(rs)

    if err != nil {

        log.Println(err)

    }

你會(huì)知道的:


rpc: service already defined: RPCServer

由于您在此處運(yùn)行兩個(gè)戈魯丁:


for i := 0; i < 2; i++ {

    wg.Add(1)

    go servers[i].server(&wg)

}

然后,他們倆都將使用以下命令注冊(cè)一個(gè) rpc 服務(wù)器:


rpc.Register(rs)

因此,其中之一是偶然的真實(shí)注冊(cè)服務(wù)器。由于運(yùn)行戈魯廷的時(shí)間未知,因此每次運(yùn)行都會(huì)有所不同


只需注冊(cè)一臺(tái)服務(wù)器即可。例如:


    go servers[1].server(&wg)


代碼審查說(shuō)明:

rs.clients[port] = *client

包含和:sync.Mutex


首次使用后不得復(fù)制互斥體。


查看完整回答
反對(duì) 回復(fù) 2022-09-12
  • 1 回答
  • 0 關(guān)注
  • 68 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)