[英]Disconnect node-xmpp client
我正在查看node-xmpp和node-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.