gpt4 book ai didi

javascript - 客户端重新加载页面时如何修复服务器故障?

转载 作者:数据小太阳 更新时间:2023-10-29 03:23:06 24 4
gpt4 key购买 nike

当客户端重新加载页面时,服务器发出错误 -websocket:关闭 1001(离开)。当客户端重新加载页面时,websocket 连接是否重新连接?我最近开始学习编程,所以如果问题很愚蠢,请原谅。客户端代码

var socket = new WebSocket("ws://localhost:8080/ws" );

socket.onmessage = function (event) {
DownloadScene(event)
}

function DownloadScene(event) {
var data = JSON.parse(event.data)
document.getElementById(data.id).innerHTML = data.body;
}
function loadScene(scene) {
var page = {
query_type:"loadScene",
data : {temp:scene}
}
var event = JSON.stringify(page);
socket.send(event);
}

我正在使用 gorilla websocket 库来建立连接。

服务器代码

func WebSocketHandler(w http.ResponseWriter, r *http.Request) {

conn, err := upGrader.Upgrade(w, r, nil)

if err != nil {
log.Println(err)
return
}
for { webSocketHandler(conn)}
defer conn.Close()
}

func webSocketHandler(conn *websocket.Conn) {

println("new connect")
err := conn.ReadJSON(&query)
if err != nil {
log.Fatal(err)
return
}
switch query.QueryType {
case "loadScene" :
err := json.Unmarshal(query.Data,&frames)
if err!= nil{
log.Fatal(err)
}
var buf bytes.Buffer
data := frame.ExecuteTemplate(&buf,"frame",nil)
if data!=nil{
log.Fatal(data)
}
res,e := json.Marshal(&Frame{"scene",buf.String()})
if e !=nil{
log.Println(e)
}

errs := conn.WriteMessage(1,res)
if err!=nil{
log.Fatal(errs)
}
}
}

最佳答案

go 中,log.Fatal(..) 退出您的应用程序。

err := conn.ReadJSON(&query)

当客户端连接关闭和下一个 block 时,将返回一个err:

if err != nil {
log.Fatal(err)
return
}

将关闭 go 服务器,Javascript 客户端将无法重新连接。

您的服务器结构看起来也不太正确 - WebSocketHandler 被调用来处理单个连接:

    .
http.HandleFunc("/", WebSocketHandler)
log.Fatal(http.ListenAndServe("localhost:8080", nil))
}

func WebSocketHandler(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Print("Error upgrading websocket:", err)
return
}

defer conn.Close()

for {
err = conn.ReadJSON(&query)
if err != nil {
log.Print("Error reading query: ", err)
return
}
.
// -- process query here --
.
}
}

关于javascript - 客户端重新加载页面时如何修复服务器故障?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49704093/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com