首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过websockets设置ejabberd

通过websockets设置ejabberd
EN

Stack Overflow用户
提问于 2017-12-17 22:47:09
回答 1查看 1.5K关注 0票数 1

我已经启动并运行了一个ejabberd服务器。我可以通过web客户端对其进行测试,并且使用BOSH连接可以很好地工作。

我想现在通过网络套接字连接到它,我不知道我错过了什么让它工作,我只是知道它不工作。

这是我的ejabberd.yml的摘录

代码语言:javascript
复制
    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的日志中没有任何内容。我确实有波什人关系的记录。

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

任何建议都是受欢迎的。

EN

回答 1

Stack Overflow用户

发布于 2018-01-06 11:09:57

当客户端不向服务器发送 pong 响应时,服务器将抛出连接超时错误,确保您正在发送正在使用Strophe.js的pong response.If,检查处理程序http://strophe.im/strophejs/doc/1.2.14/files/strophe-js.html#Strophe.Connection.addHandler

代码语言:javascript
复制
    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

代码语言:javascript
复制
websocket_ping_interval: 50
websocket_timeout: 60
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47860211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档