通过Websockets设置Ejabberd



我有一个 ejabberd 服务器启动和运行。我可以通过Web客户端进行测试,并且使用BOSH连接效果很好。

我现在想通过Web插座连接到它,我不确定我缺少它的工作,我只知道它没有。

这是我的 ejabberd.yml

的摘录
    hosts:
     - "localhost"
     - "somedomain.com"
     - "im.somedomain.com"
listen : 
    port: 5280
    ip: "::"
    module: ejabberd_http
    request_handlers:
      "/websocket": ejabberd_http_ws
      "/pub/archive": mod_http_fileserver
    web_admin: true
    http_bind: true
    ## register: true
    ## captcha: true
    tls: true
    certfile: "/etc/ejabberd/ejabberd.pem"

现在,我尝试通过JavaScript打开Web插座,如下所示:

var ws = new WebSocket("ws://somedomain:5280/websocket/");

我得到ERR_CONNECTION_TIMED_OUT的回报。当我尝试打开Weksocket时,Ejabberd的日志中没有什么。我确实有BOSH连接的日志。

我不确定我是否正在适当测试,也不确定我的服务器是否正确设置。

最欢迎任何建议。

当客户端未发送 pong 对服务器的响应时,服务器将引发服务器的连接超时错误,请确保您正在发送Pong Response。如果您正在使用strophe.js友善检查处理程序http://strophe.im/strophejs/doc/1.2.14/files/strophe-jsrophe-jsrophe-js.html#strophe.connection.addhandler

    connection = new WebSocket("ws://somedomain:5280/websocket/");
//Adding ping handler using strophe connection
    connection.addHandler(pingHandler, "urn:xmpp:ping", "iq", "get");
//Ping Handler Call back function
    function pingHandler(ping) {
        var pingId = ping.getAttribute("id");
        var from = ping.getAttribute("from");
        var to = ping.getAttribute("to");
        var pong = strophe.$iq({
            type: "result",
            "to": from,
            id: pingId,
            "from": to
        });
        connection.send(pong);
        return true;
    }

另外,请考虑您将此配置添加到ejabberd.yml

websocket_ping_interval: 50
websocket_timeout: 60

最新更新