使用 ws 的 godot
最编程
2024-07-20 07:10:28
...
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) # 停止处理。
上一篇: C --- 打印水仙花的数量
下一篇: HTML+CSS+JS 俄罗斯方块游戏
推荐阅读
-
TensorFlow 的基本概念和使用场景
-
python 机器人编程 - 使用 python API 调用控制 wifi 小车的示例程序
-
如何使用 @Builder 装饰器优化 HarmonyOS NEXT 中 UI 组件的重复使用?
-
C# II 中的多态性应用说明示例(使用隐藏方法)
-
RabbitMQ】RabbitMQ 7 种工作模式的简单使用示例
-
Linux 系统编程】环境基础开发工具的使用
-
Artalk 多站点评论系统的部署和使用
-
安装 Prometheus 和 Grafana,通过简单配置和使用 PromQL 查询语言以及基于 Pushgateway 的 Prometheus 数据收集,实现监控数据的可视化。
-
使用 Graphql 的 .NET 演示
-
OpenCV 高级图形用户界面 (13) 选择图像的矩形区域 函数 selectROI 的使用 - 代码示例