더북(TheBook)

다음은 클라이언트의 read() 메서드와 write() 메서드다.

▼ client.go

func (c *Client) read() (*Message, error) {
    var msg *Message
     
    // 웹소켓 커넥션에 JSON 형태의 메시지가 전달되면 Message 타입으로 메시지를 읽음
    if err := c.conn.ReadJSON(&msg); err != nil {
        return nil, err
    }
     
    // Message에 현재 시간과 사용자 정보 세팅
    msg.CreatedAt = time.Now()
    msg.User = c.user
     
    log.Println("read from websocket:", msg)
     
    // 메시지 정보 반환
    return msg, nil
}
 
func (c *Client) write(m *Message) error {
    log.Println("write to websocket:", m)
     
    // 웹소켓 커넥션에 JSON 형태로 메시지 전달
    return c.conn.WriteJSON(m)
}

read() 메서드에서는 웹소켓으로부터 메시지를 받아 현재 시간과 접속자 정보를 세팅한 후 반환한다. 웹소켓 커넥션에 정의된 ReadJSON() 메서드는 웹소켓으로부터 JSON 형태의 데이터를 특정 타입으로 읽어 들인다(c.conn.ReadJSON(&msg)).

write() 메서드에서는 메시지를 웹소켓 클라이언트에 전달하는 작업을 한다. 웹소켓 커넥션에 정의된 WriteJSON() 메서드는 특정 타입 값을 JSON 형태로 변환한 후 웹소켓에 전달한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.