2017-12-17 22 views
0

私はejabberdサーバを稼働させています。 私はweb clientsでテストでき、BOSH接続を使って正常に動作します。ウェブサイト経由でejabberdを設定する

私は現在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を介してウェブソケットを開こうとしました:

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

私はお返しにERR_CONNECTION_TIMED_OUTを取得します。私はweksocketを開こうとすると、ejabberdのログには何もありません。私はBOSH接続のログを持っています。

私は適切にテストしているか、サーバーが正しく設定されているかどうかはわかりません。

ご提案は大歓迎です。

答えて

1

クライアントがサーバーに応答をピンポンを送信していない場合、接続タイムアウトエラーがサーバによってスローされますが、あなたがピンポンresponse.Ifを送信していることを確認してくださいあなたはStrophe.jsを使用している親切ハンドラhttp://strophe.im/strophejs/doc/1.2.14/files/strophe-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 
関連する問題