Go 언어로 네트워크 프로그래밍 기능을 배우고 WebSocket 통신을 구현합니다.

WBOY
풀어 주다: 2023-07-29 17:37:22
원래의
1407명이 탐색했습니다.

Go 언어로 네트워크 프로그래밍 기능을 배우고 WebSocket 통신 구현

소개
Go 언어는 강력한 프로그래밍 언어로 네트워크 프로그래밍 분야에서 널리 사용됩니다. 풍부한 네트워크 프로그래밍 기능과 라이브러리를 제공하여 개발자가 다양한 네트워크 통신 기능을 쉽게 구현할 수 있습니다. 이 기사에서는 Go 언어에서 일반적으로 사용되는 네트워크 프로그래밍 기능을 소개하고 예제를 결합하여 WebSocket 통신을 구현합니다.

1. 네트워크 프로그래밍 기능

  1. net.Listen
    함수 서명: func Listen(network, address string)(Listener, error)
    목적: 지정된 네트워크 주소를 듣고 Listener 객체를 반환합니다.
    예:

    listener, err := net.Listen("tcp", "127.0.0.1:8080")
    if err != nil {
     log.Fatal(err)
    }
    defer listener.Close()
    로그인 후 복사
  2. Accept
    함수 서명: func (l *TCPListener) Accept() (Conn, error)
    목적: 연결 요청을 수락하고 Conn 개체를 반환합니다.
    예:

    conn, err := listener.Accept()
    if err != nil {
     log.Fatal(err)
    }
    defer conn.Close()
    로그인 후 복사
  3. WebSocket 프로토콜
    WebSocket은 다음을 사용하는 메서드입니다. 단일 TCP 연결 클라이언트와 서버 간의 실시간 통신을 허용하는 전이중 통신용 프로토콜입니다. Go 언어는 WebSocket 통신 기능을 쉽게 구현할 수 있도록 gorilla/websocket 라이브러리를 제공합니다. gorilla/websocket库来方便地实现WebSocket通信功能。

二、实现WebSocket通信

  1. 安装gorilla/websocket

    2. WebSocket 통신 구현
  2. gorilla/websocket 라이브러리 설치
  3. 명령줄에서 다음 명령을 실행하세요.
  4. go get -u github.com/gorilla/websocket
    로그인 후 복사

  5. 서버측 코드
package main

import (
 "log"
 "net/http"

 "github.com/gorilla/websocket"
)

var upgrader = websocket.Upgrader{
 ReadBufferSize:  1024,
 WriteBufferSize: 1024,
}

func websocketHandler(w http.ResponseWriter, r *http.Request) {
 conn, err := upgrader.Upgrade(w, r, nil)
 if err != nil {
     log.Fatal(err)
 }
 defer conn.Close()

 for {
     messageType, message, err := conn.ReadMessage()
     if err != nil {
         log.Println(err)
         break
     }
     log.Printf("Received message: %s
", message)

     if err := conn.WriteMessage(messageType, message); err != nil {
         log.Println(err)
         break
     }
 }
}

func main() {
 http.HandleFunc("/websocket", websocketHandler)
 log.Fatal(http.ListenAndServe(":8080", nil))
}
로그인 후 복사

클라이언트 -side code

package main

import (
 "log"
 "net/url"

 "github.com/gorilla/websocket"
)

func main() {
 u := url.URL{Scheme: "ws", Host: "localhost:8080", Path: "/websocket"}
 conn, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
 if err != nil {
     log.Fatal(err)
 }
 defer conn.Close()

 for i := 0; i < 5; i++ {
     message := []byte("Hello from client")
     if err := conn.WriteMessage(websocket.TextMessage, message); err != nil {
         log.Fatal(err)
     }

     _, receivedMessage, err := conn.ReadMessage()
     if err != nil {
         log.Fatal(err)
     }
     log.Printf("Received message from server: %s", receivedMessage)
 }
}
로그인 후 복사
🎜🎜 위의 두 코드 파일을 실행하여 WebSocket 프로토콜을 기반으로 클라이언트와 서버 간의 통신을 구현합니다. 클라이언트는 서버에 메시지를 보내고, 서버로부터 메시지를 다시 받는 과정을 5번 반복합니다. 🎜🎜요약🎜이 기사에서는 Go 언어에서 일반적으로 사용되는 네트워크 프로그래밍 기능을 소개하고 예제를 통해 WebSocket 통신을 구현합니다. 이러한 지식을 학습함으로써 우리는 이를 더 잘 이해하고 실제 네트워크 프로그래밍에 적용할 수 있습니다. 웹 애플리케이션을 개발하든 다른 네트워크 통신 시나리오를 개발하든 이러한 네트워크 프로그래밍 기능을 익히면 개발 효율성이 크게 향상됩니다. 독자들이 학습을 통해 Go 언어의 네트워크 프로그래밍 기능을 더욱 깊이 이해하고 실제 프로젝트에 유연하게 적용할 수 있기를 바랍니다. 🎜

위 내용은 Go 언어로 네트워크 프로그래밍 기능을 배우고 WebSocket 통신을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿