客户端重新加载页面时如何修复服务器故障?
Posted
技术标签:
【中文标题】客户端重新加载页面时如何修复服务器故障?【英文标题】:How to fix a server failure when the client reloads the page? 【发布时间】:2018-04-07 05:11:23 【问题描述】:当客户端重新加载页面时,服务器发出错误- 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)
【问题讨论】:
【参考方案1】:在go
中,log.Fatal(..) 退出您的应用程序。
err := conn.ReadJSON(&query)
将在客户端连接关闭和下一个块时返回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 --
.
【讨论】:
【参考方案2】:如果页面加载 websocket 连接,那么就不用担心了。当页面刷新时,客户端将连接到服务器。您可以忽略 websocket close 1001 的异常。
【讨论】:
以上是关于客户端重新加载页面时如何修复服务器故障?的主要内容,如果未能解决你的问题,请参考以下文章