gpt4 book ai didi

javascript - strope.js 和 openfire 谁在页面重新加载时终止连接?

转载 作者:行者123 更新时间:2023-11-28 15:53:45 27 4
gpt4 key购买 nike

我正在使用 symfony2 构建一些应用程序。在那个应用程序中我有聊天应用程序。我在聊天中使用附加 session 。

1)登录时,我启动事件监听器以捕获登录中的用户/密码,连接到 openfire 服务器并获取 sid 和 rod。

2)之后,我将这些数据存储在 session 中,以便稍后我可以在聊天的每个页面上使用它们。

重新加载/刷新页面时出现问题。

我猜测这是因为对 url:7070/httpd-bind 的 ajax 请求被取消,strope 发送终止到 openfire 服务器。但是我找不到任何终止节的地方。

我已经修补了 strope.js 以在页面卸载时使用同步,但同样不起作用。

Chat.connection.flush();
Chat.connection.sync = true; // Switch to using synchronous requests since this is typically called onUnload.

Chat.connection.disconnect();

请为此提出解决方案,我正在编码 10 小时,但我不知道如何解决这个问题。

我可以在 session 中存储用户/密码,但这太愚蠢了。如果我必须这样做,为什么还要存在附加 session 。

最佳答案

更新

在尝试计算这个rid plus+1等之后,我注意到rid在存在时发生变化,在名册上发送的消息上的消息在名册上发生变化,所以我在每个上创建了一个XMLHttpRequest来记住 session 中的新rid。由于某种原因,本地存储有时工作有时不工作。

现在我已经摆脱了所有的时间。

<小时/>

我想我明白了。问题在于摆脱和存在。

1)首先,您必须从日志中找出您的 Rid 是增加还是减少。

我的减少了 1。所以我从 Chat.connection.rid 中减去 -1

2)在我的 openfire 日志中,我发现我在页面刷新时发送了不可用状态所以我更改了 window.unload 函数以将状态发送到在线。 N

现在我刷新页面一百万次并且从未断开连接。

现在我只需要弄清楚如何将connection.rid 记住到非HTML 浏览器的localStorage 中。

要在 Debug模式下启动 openfire,只需添加 ./openfire.sh -debug。然后你就可以看到 debug.log 中的所有内容

这对我来说确实是个骗局。如果这对您有用,请+1 并接受答案。

不要忘记在注销时终止 session :)

更新

这是我的 window.onunload 函数

window.onunload = function(ev){

var initialPresence = $pres().c('show').t("cao").up().c('status').t("sad");

Chat.connection.send(initialPresence);
store.set('session_rid', parseInt(Chat.connection.rid)-1);

//save rooster contacts state
var contacts = document.getElementById('records').getElementsByTagName('li');
var id_value;
var class_value;
var status;
var el;
for(i= 0; i < contacts.length; i++){

el = contacts[i].getElementsByClassName("mood")[0];
status = el.textContent || el.innerText;
Array.prototype.slice.call(contacts[i].attributes).forEach(function(item) {

if(item.name == "id"){
id_value = item.value;
}
if(item.name == "class"){
class_value = item.value;
}
store.set('user'+i, { id: id_value, class_name: class_value, status : status });

});

}
Chat.disconnect();
}

这是我的 window.onload 函数

window.onload = function(){
if(store.get("session_rid")){

var obj;
var id;
var class_name;
var status;

store.forEach(function(val, key) {
if(val !== "session_rid"){

setTimeout(function(){
obj = eval(key);
id = obj.id;
class_name = obj.class_name;
status = obj.status;
if(document.getElementById(id)){
document.getElementById(id).className = class_name;
document.getElementById(id).getElementsByClassName("mood")[0].innerHTML = "<span>"+status+"</span>";
}
}, 1000);


}
})
}
}

这对我有用。我用过store.js存储数据,以便它可以在 IE 上运行。

我使用了附加 session 。

//json is from ajax call on some php script that has started attached session on user login
var obj = JSON.parse(json);
connection = new Strophe.Connection(BOSH_SERVICE);
connection.attach(obj.fulljid,
obj.sid,
(store.get("session_rid") ? store.get("session_rid"):obj.rid),
justDoIt);
full_jid = obj.fulljid;

关于javascript - strope.js 和 openfire 谁在页面重新加载时终止连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19611465/

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