连接到 XMPP 服务器

Posted

技术标签:

【中文标题】连接到 XMPP 服务器【英文标题】:Connecting to an XMPP server 【发布时间】:2014-04-15 17:30:17 【问题描述】:

所以我一直在尝试阅读 XMPP 并决定尝试使用 Strophe JS 库。我尝试使用我认为合适的域、用户名和密码连接到我知道的 XMPP 服务器(地址是 http://chat.na1.lol.riotgames.com:5223),当我尝试连接时(仅在本地运行 javascript),以下内容被发送到服务器:

<body rid='3367062472' xmlns='http://jabber.org/protocol/httpbind' to='pvp.net' xml:lang='en' wait='60' hold='1' content='text/xml; charset=utf-8' ver='1.6' xmpp:version='1.0' xmlns:xmpp='urn:xmpp:xbosh'/>

但我在 Chrome 中收到以下错误:

XMLHttpRequest cannot load https://chat.na1.lol.riotgames.com:5223/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

在 FireFox 中,我看到了发送内容的控制台输出,但没有看到关于 Access-Control-Allow-Origin 标头的错误。

以下是尝试连接的简单 javascript:

var SERVER = "http://chat.na1.lol.riotgames.com:5223", 
    username = "name@domain.net",
    password = "AIR_password",
    connection;

function log(msg) 

    console.log(msg);


function rawInput(data)

    log('RECV: ' + data);


function rawOutput(data)

    log('SENT: ' + data);


function onConnect(status)

    if (status == Strophe.Status.CONNECTING) 
        log('Strophe is connecting.');
     else if (status == Strophe.Status.CONNFAIL) 
        log('Strophe failed to connect.');
     else if (status == Strophe.Status.DISCONNECTING) 
        log('Strophe is disconnecting.');
     else if (status == Strophe.Status.DISCONNECTED) 
        log('Strophe is disconnected.');
     else if (status == Strophe.Status.CONNECTED) 
        log('Strophe is connected.');
        connection.disconnect();
    


$(document).ready(function () 
    connection = new Strophe.Connection(SERVER);
    connection.rawInput = rawInput;
    connection.rawOutput = rawOutput;

    connection.connect(username, password, onConnect);
);

我是否遇到了跨域问题?我尝试连接的方式有问题吗?

我知道可以连接到该服务器,因为可以通过 Pidgin 进行连接,并且其他 3rd 方应用程序也可以这样做。我需要自己设置一些服务器来完成这种连接吗?

【问题讨论】:

【参考方案1】:

5223 是“老式 SSL”TCP 连接的端口,大多数 XMPP 应用程序使用 TCP 连接到服务器。但是 javascript 应用程序不可能 (AFAIK) 来维持 TCP 连接并使用 XMPP BOSH 扩展(长轮询 HTTP 请求),您需要在服务器上安装 BOSH 连接管理器/扩展(通常在 5280 端口上)。

【讨论】:

以上是关于连接到 XMPP 服务器的主要内容,如果未能解决你的问题,请参考以下文章

在浏览器中使用 xmpp.js 连接到 XMPP 服务器

使用 Javascript 连接到 XMPP 服务器

无法使用 HTTP 绑定连接到 XMPP 服务器(openfire)

无法使用 aSmack 连接到本地 XMPP 服务器

python没有连接到本地XMPP服务器

节点连接到本地主机中的 Xmpp 服务器