gpt4 book ai didi

javascript - 在 haskell websockets 示例服务器上捕获刷新?

转载 作者:行者123 更新时间:2023-12-01 03:38:16 24 4
gpt4 key购买 nike

Websockets 服务器 example按预期工作。刷新浏览器(例如带有 chrome 的 S-F5)时,Websocket 会断开连接,但仍按预期工作。刷新后,用户必须再次输入名称才能连接到服务器。

您将如何捕获刷新事件并保持用户连接?例如。这仅在服务器端可行还是客户端也需要修改? Haskell 示例或此类链接以及有关如何执行此操作的提示都很好!

最佳答案

How would you capture the refresh-event...

实际上并没有刷新事件这样的东西需要检测(我很乐意在这方面被证明是错误的!)

... and keep the user connected...

刷新,或者更确切地说,在再次加载页面之前离开页面,会导致 websocket 断开连接,并且(特别是如果这是网站上唯一打开的页面),您实际上无能为力去做吧。

因此,唯一可以做的就是在下次页面加载时进行某种自动重新连接。允许这样做的解决方案是......

  • 首次输入名称时,名称会保存在浏览器中的某个位置;
  • 当页面重新加载时,它会检查之前保存的名称;
  • 如果找到,它会使用该名称再次连接。

本地存储就是保存此信息的地方之一,如下例所示,修改自 https://github.com/jaspervdj/websockets/tree/master/example从本地存储保存/检索名称。

$(document).ready(function () {
var savedUser = sessionStorage.getItem("rejoin-user");
if (savedUser) {
joinChat(savedUser);
}

$('#join-form').submit(function () {
joinChat($('#user').val())
});

function joinChat(user) {
sessionStorage.setItem("rejoin-user", user);
$('#warnings').html('');
var ws = createChatSocket();

ws.onopen = function() {
ws.send('Hi! I am ' + user);
};

ws.onmessage = function(event) {
if(event.data.match('^Welcome! Users: ')) {
/* Calculate the list of initial users */
var str = event.data.replace(/^Welcome! Users: /, '');
if(str != "") {
users = str.split(", ");
refreshUsers();
}

$('#join-section').hide();
$('#chat-section').show();
$('#users-section').show();

ws.onmessage = onMessage;

$('#message-form').submit(function () {
var text = $('#text').val();
ws.send(text);
$('#text').val('');
return false;
});
} else {
$('#warnings').append(event.data);
ws.close();
}
};

$('#join').append('Connecting...');

return false;
};
});

... Is this doable only on server side or does the client require modifications as well?

它肯定需要在客户端中完成某些操作才能自动重新连接。上面的基本版本不需要对服务器进行任何更改,但如果您想要一些更奇特的东西,例如以某种方式以不同方式处理/显示初始连接和自动重新连接的情况,那么可能需要修改服务器。

关于javascript - 在 haskell websockets 示例服务器上捕获刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44087446/

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