我已经启动并运行了一个ejabberd服务器。我可以通过web客户端对其进行测试,并且使用BOSH连接可以很好地工作。
我想现在通过网络套接字连接到它,我不知道我错过了什么让它工作,我只是知道它不工作。
这是我的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的日志中没有任何内容。我确实有波什人关系的记录。
我不确定我是否正在进行适当的测试,也不确定我的服务器是否设置正确。
任何建议都是受欢迎的。
发布于 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。
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: 60https://stackoverflow.com/questions/47860211
复制相似问题