2014-11-14 2 views
1

Unity3D 네트워킹 라이브러리는 UDP를 사용하며 RPC 호출을위한 메소드를 가지고 있습니다. 내 서버에 UDP를 통한 RPC를 사용하려고하는데 약간의 문제가 있습니다. 클라이언트 코드가 여기GO에서 UDP를 사용하는 RPC

type Args struct { 
    X, Y int 
} 

type RequestHandler struct{} 

func (self *RequestHandler) Add(args *Args, reply *int) error { 
    *reply = args.X + args.Y 
    return nil 
} 

func main() { 
    addr := net.UDPAddr{ Port: 5127, IP: net.ParseIP("127.0.0.1") } 
    handler := new(RequestHandler) 

    rpc.Register(handler) 
    conn, err := net.ListenUDP("udp", &addr) 
    defer conn.Close() 

    if err != nil { 
    panic(err) 
    } 

    for { 
    go rpc.ServeConn(conn) 
    } 
} 

된다 : 여기에 지금있어 기본 서버 코드의 난이 프로그램을 실행할 때

type Args struct { 
    X, Y int 
} 

func main() { 
    client, err := rpc.Dial("udp", "127.0.0.1:5127") 
    if err != nil { log.Fatal("dialing:", err) } 

    // Synchronous call 
    args := &Args{7,8} 
    var reply int 
    err = client.Call("RequestHandler.Add", args, &reply) 
    if err != nil { 
    log.Fatal("arith error:", err) 
    } 

    fmt.Printf("Result: %d + %d = %d", args.X, args.Y, reply) 
} 

, 그들은 모두 멈춰 아무 일도 발생하지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

0

RPC over UDP는 UDP 소켓의 특성으로 인해 특수한 UDP 인식 처리가 필요합니다.

아무런 연결도없고 단지 주소로 보낸 데이터 그램입니다.

클라이언트가 회신을 받으려면 청취 소켓을 설정 한 다음 요청과 함께 서버로 보내야합니다. 그러면 서버는 클라이언트 주소에 응답합니다. 그래서 당신은 할 수있다, 나는 이동에 대한 연결이없는 RPC를 구현하는 패키지 모르겠어요 : (UDP 즉)

순/RPC는 비 연결 지향 전송을위한 처리 특별한 경우가없는 여기에 자신을 굴려 야합니다.

관련 문제