go WebSocket 服务端 + 客户端

服务端

package main

import (
	"fmt"
	"github.com/gorilla/websocket"
	"log"
	"math/rand"
	"net/http"
)

var UP = websocket.Upgrader{
    
    
	ReadBufferSize:  2048,
	WriteBufferSize: 2048,
}

func handler(w http.ResponseWriter, r *http.Request) {
    
    
	conn, err := UP.Upgrade(w, r, nil)
	if err != nil {
    
    
		fmt.Println(err)
		return
	}
	for {
    
    
		_, p, e := conn.ReadMessage()
		log.Println("舔狼们:", string(p))
		msg := []string{
    
    "哈哈...", "真的吗?", "嗯呢", "是吗?", "这个也太那个了吧"}
		conn.WriteMessage(websocket.TextMessage, []byte(msg[rand.Intn(len(msg))]))
		if e != nil {
    
    
			fmt.Println("收到消息,退出程序!")
			break
		}
	}
	defer conn.Close()
	log.Println("关闭服务!")
}

func main() {
    
    
	http.HandleFunc("/", handler)
	err := http.ListenAndServe(":8890", nil)
	if err != nil {
    
    
		log.Println("err = ", err)
	}
}

客户端

package main

import (
	"bufio"
	"github.com/gorilla/websocket"
	"log"
	"os"
)

func main() {
    
    
	dl := websocket.Dialer{
    
    }
	conn, _, err := dl.Dial("ws://127.0.0.1:8890", nil)
	if err != nil {
    
    
		log.Println("建立链接失败!!")
		return
	}
	go send(conn)
	for {
    
    
		m, p, e := conn.ReadMessage()
		if e != nil {
    
    
			return
		}
		log.Println(m, string(p))
	}
}

func send(conn *websocket.Conn) {
    
    
	for {
    
    
		reader := bufio.NewReader(os.Stdin)
		l, _, _ := reader.ReadLine()
		conn.WriteMessage(websocket.TextMessage, l)
	}
}

猜你喜欢

转载自blog.csdn.net/wjl__ai__/article/details/125032902