簡體   English   中英

斷開節點XMPP客戶端的連接

[英]Disconnect node-xmpp client

我正在查看node-xmppnode-simple-xmpp,並且嘗試創建一個簡單的客戶端。
一切正常,除了斷開連接。

我在simple-xmpp 示例之后制作了以下文件:

var xmpp = require('simple-xmpp');

xmpp.on('online', function() {
    console.log('Yes, I\'m connected!');
    xmpp.send('test2@example.com', 'Hello test');
    // OK UNTIL HERE, DISCONNECT NOW
});

xmpp.connect({jid: 'test@example.com/webchat', password: 'test', reconnect: 'false'}); 

但是我不知道如何斷開連接。 我試圖發送一個不可用類型的節:

stanza = new xmpp.Element('presence', {from: 'test@example.com', type: 'unavailable'});
xmpp.conn.send(stanza);
delete xmpp;

這導致客戶端暫時脫機,但是問題是,它在幾秒鍾后重新連接並繼續發送“狀態”節。

我也嘗試調用xmpp.conn.end(),它也會斷開連接,但之后會出現錯誤:

node_modules/simple-xmpp/node_modules/node-xmpp/lib/xmpp/connection.js:100
    if (!this.socket.writable) {
                    ^
TypeError: Cannot read property 'writable' of undefined

那么,我在做什么錯呢? 我敢肯定有一種簡單的方法可以斷開連接。

在第一種情況下, <presence type='unavailable'/>並不總是真正斷開您的連接。 在您的服務器中,看起來可能是這樣,但是您的客戶端正在自動重新連接。 delete xmpp實際上並沒有導致您的對象被清除,只是將其從本地名稱空間中刪除。

在第二種情況下, send()不會立即將您的節寫入底層套接字。 如果之后立即使用end()關閉套接字,則在實際發生寫操作時關閉套接字。

如果在調用send()之后添加一個短暫的超時,然后在調用end()之前,它將起作用。 為了使它更好 ,您希望您的庫開發人員在send()實際上已寫入套接字時給您回調。

您還應該查看此http://tools.ietf.org/html/rfc7395

簡而言之,如果客戶端用於打開連接,則客戶端應使用該連接來終止該連接。

更准確地說:

<close xmlns="urn:ietf:params:xml:ns:xmpp-framing" />

解決“ Joe Hildebrand”問題也解決了我的問題,但這對我來說似乎更合適。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM