我正在用 golang 编写一个 websocket 服务器。我写了一个简单的测试脚本:
package main
import (
"fmt"
"io"
"log"
"net"
"github.com/gobwas/ws"
)
func HandleConn(conn net.Conn) {
for {
header, err := ws.ReadHeader(conn)
if err != nil {
log.Fatal(err)
}
buf := make([]byte, header.Length)
_, err = io.ReadFull(conn, buf)
if err != nil {
log.Fatal(err)
}
fmt.Println(buf)
fmt.Println(string(buf))
}
}
func main() {
ln, err := net.Listen("tcp", "localhost:8080")
if err != nil {
log.Fatal(err)
}
for {
conn, err := ln.Accept()
if err != nil {
log.Fatal(err)
}
_, err = ws.Upgrade(conn)
if err != nil {
log.Fatal(err)
}
go HandleConn(conn)
}
}
我在浏览器控制台中执行:
let socket = new WebSocket("ws://127.0.0.1:8080")
socket.send("Hello world")
在终端中,我得到一些随机字节。每一个都是socket.send("Hello world")不同的。它们是什么,为什么它们会随着每次提交而改变?他从哪里得到这些字节?字节数始终对应于字符串中的字符数,即 他读他想要的。如文档中所述
数据是加密的,需要解密。