WebSocket은 웹 브라우저와 서버 간의 실시간 양방향 통신에 사용되는 기술입니다. 이는 데이터를 보내고 받는 안정적인 방법을 제공하며 기존 HTTP 요청-응답 메커니즘보다 더 효율적이고 빠릅니다. golang에서는 타사 라이브러리를 사용하여 WebSocket 통신을 지원할 수 있습니다. 이 기사에서는 gorilla/websocket 라이브러리를 사용하여 WebSocket 통신을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다.
go get 명령을 사용하여 gorilla/websocket 라이브러리를 쉽게 설치:
go get github.com/gorilla/websocket
서버 측에서는 gorilla/websocket 라이브러리의 업그레이드 기능을 사용하여 HTTP 연결 WebSocket 연결로 업그레이드하세요. 코드는 다음과 같습니다.
import ( "net/http" "github.com/gorilla/websocket" ) var upgrader = websocket.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 1024, } func myHandler(w http.ResponseWriter, r *http.Request) { // 将HTTP连接升级为WebSocket连接 conn, err := upgrader.Upgrade(w, r, nil) if err != nil { // 处理错误 return } // 处理WebSocket连接 for { // 读取消息 messageType, p, err := conn.ReadMessage() if err != nil { // 处理错误 return } // 处理消息 err = conn.WriteMessage(messageType, p) if err != nil { // 处理错误 return } } } func main() { http.HandleFunc("/", myHandler) http.ListenAndServe(":8080", nil) }
클라이언트 측에서는 JavaScript 코드를 사용하여 WebSocket 연결을 생성할 수 있습니다. 코드는 다음과 같습니다:
var ws = new WebSocket("ws://localhost:8080/"); ws.onopen = function() { console.log("WebSocket连接已打开"); }; ws.onmessage = function(evt) { console.log("接收到消息: " + evt.data); }; ws.onclose = function() { console.log("WebSocket连接已关闭"); };
서버 측에서는 WriteMessage 함수를 사용하여 클라이언트에 메시지를 보낼 수 있습니다. 코드는 다음과 같습니다:
err := conn.WriteMessage(websocket.TextMessage, []byte("Hello, client!")) if err != nil { // 处理错误 return }
클라이언트 측에서는 send 함수를 사용하여 메시지를 보내고 onmessage 함수를 사용하여 메시지를 받을 수 있습니다. 코드는 다음과 같습니다.
ws.send("Hello, server!"); ws.onmessage = function(evt) { console.log("接收到消息: " + evt.data); };
실제 애플리케이션에서는 WebSocket 요청을 처리할 때 인증 및 승인을 수행해야 할 수도 있습니다. 이 경우 HTTP 헤더를 사용하여 인증 정보를 전달할 수 있습니다. 예를 들어 HTTP 헤더에 다음과 유사한 정보를 추가할 수 있습니다.
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
그런 다음 서버 측에서는 Upgrader 기능의 CheckOrigin 옵션을 사용하여 WebSocket 요청의 출처를 확인하고 인증 정보를 사용할 수 있습니다. 요청을 처리하기 위해 HTTP 헤더에 있습니다. 구체적인 코드는 다음과 같습니다.
var upgrader = websocket.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 1024, CheckOrigin: func(r *http.Request) bool { // 检查请求的来源 if r.Header.Get("Origin") != "http://localhost:8080" { return false } // 检查认证信息 if r.Header.Get("Authorization") != "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" { return false } return true }, } func myHandler(w http.ResponseWriter, r *http.Request) { // 将HTTP连接升级为WebSocket连接 conn, err := upgrader.Upgrade(w, r, nil) if err != nil { // 处理错误 return } // 处理WebSocket连接 for { // 读取消息 messageType, p, err := conn.ReadMessage() if err != nil { // 处理错误 return } // 处理消息 err = conn.WriteMessage(messageType, p) if err != nil { // 处理错误 return } } }
이 글에서는 golang에서 gorilla/websocket 라이브러리를 사용하여 WebSocket 통신을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. WebSocket 기술을 사용하면 온라인 채팅방, 멀티플레이어 게임과 같은 효율적인 실시간 양방향 통신 애플리케이션을 구축할 수 있습니다. 실제 응용 프로그램에서는 인증 및 권한 부여, 예외 처리 등과 같은 보안 및 안정성과 같은 문제도 고려해야 합니다.
위 내용은 golang에서 크로스 플랫폼 통신을 위해 WebSocket을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!