다음은 클라이언트의 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 형태로 변환한 후 웹소켓에 전달한다.