go服务端
package main
import (
"encoding/json"
"fmt"
"github.com/gorilla/websocket"
"net/http"
)
var upgrader = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
}
// 处理函数
func handleWebSocket(w http.ResponseWriter, r *http.Request) {
// 使用 upgrader 将 HTTP 连接升级为 WebSocket 连接
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
fmt.Println("Upgrade:", err)
return
}
defer conn.Close()
for {
// 读取客户端发送的消息
messageType, message, err := conn.ReadMessage()
if err != nil {
fmt.Println("Read:", err)
break
}
fmt.Printf("Received: %s\n", message)
// 将消息回发给客户端
m := map[string]string{}
m["message"] = "hello"
marshal, err := json.Marshal(m)
if err != nil {
return
}
err = conn.WriteMessage(messageType, marshal)
if err != nil {
fmt.Println("Write:", err)
break
}
}
}
func main() {
http.HandleFunc("/ws", handleWebSocket)
fmt.Println("Listening on :11111...")
err := http.ListenAndServe(":11111", nil)
if err != nil {
panic(err)
}
}
godot 客户端
extends Node
var socket = WebSocketPeer.new()
func _ready():
socket.connect_to_url("ws://localhost:11111/ws")
print("conn ws")
socket.send_text("hello")
func _process(delta):
socket.poll()
var state = socket.get_ready_state()
if state == WebSocketPeer.STATE_OPEN:
socket.send_text("godot hello")
while socket.get_available_packet_count():
var json_string = socket.get_packet().get_string_from_utf8()
print("数据包:", json_string)
#var dict = JSON.parse_string(json_string)
# 创建 JSON 解析器实例
#var json_parser = JSON.new()
# 解析 JSON 字符串到字典
#var dict = json_parser.parse(json_string)
#print("dict ", dict)
#if dict != null:
#print(dict)
#Dictionary result =(Dictionary)json.Parse(json_string).Result;
#print(result["message"]);
if json_string == "":
continue
else :
print(json_string)
var json = JSON.new()
var data = json.parse_string(json_string)
if data != null:
print(" get message : " , data["message"])
pass
#var data_received = json.data
#print("data_received : ",data_received)
else:
print("JSON Parse Error: ", json.get_error_message(), " in ", json_string, " at line ", json.get_error_line())
elif state == WebSocketPeer.STATE_CLOSING:
# 继续轮询才能正确关闭。
pass
elif state == WebSocketPeer.STATE_CLOSED:
var code = socket.get_close_code()
var reason = socket.get_close_reason()
print("WebSocket 已关闭,代码:%d,原因 %s。干净得体:%s" % [code, reason, code != -1])
set_process(false) # 停止处理。