使用 Strophe.js 建立 WebSocket 连接

Posted

技术标签:

【中文标题】使用 Strophe.js 建立 WebSocket 连接【英文标题】:Estabilishing a WebSocket connection with Strophe.js 【发布时间】:2017-06-09 20:20:45 【问题描述】:

我已经使用node-xmpp-bosh 设置了一个简单的 BOSH 和 WebSocket 服务器,如下所示:

const nxb = require("node-xmpp-bosh");
const PORT = process.env.PORT || 5280;

const server_options = 
  port: PORT,
  host: '0.0.0.0',
  path: '/http-bind/',
  logging: 'INFO'
;

const bosh_server = nxb.start_bosh(server_options);
const ws_server = nxb.start_websocket(bosh_server, server_options);

我已经将此服务器部署到 Heroku,现在我正在尝试使用它创建与 Strophe 的 XMPP 连接。

var conn = new Strophe.Connection(
  "wss://votebot-web-app-bosh.herokuapp.com/http-bind/",
  protocol: "wss"
);

conn.connect(...);

如果我打开浏览器开发工具,我可以看到对 wss://votebot-web-app-bosh.herokuapp.com/http-bind/ 的 GET 请求,HTTP 状态代码为 101 Switching Protocols,但没有响应。

确实,Heroku 日志显示了这个错误:

[2017-06-09 20:10:17.359] [WARN] [xmpp-proxy-connector.js:Object.stanza:138] - WEBSOCKET d99abd10-683a-485c-a1b8-21f960418523 bosh-stanza - stream not available

我被困在这里,所以我想知道是否有人已经使用 XMPP over WebSockets 可以给我任何建议。提前致谢。

编辑:以防万一,我忘了补充说我可以在同一 URL (https://votebot-web-app-bosh.herokuapp.com/http-bind/) 中成功连接到 BOSH 服务。

【问题讨论】:

【参考方案1】:

如果您的服务器侦听端口 process.env.PORT 或 5280,则客户端必须连接到端口 process.env.PORT 或端口 5280。

    "wss://votebot-web-app-bosh.herokuapp.com/http-bind/",

wss = 端口 443,除非您指定另一个。

【讨论】:

是的,我也尝试在 Strophe 中指定端口。问题是 Heroku 没有给你一个固定的端口。每次启动应用程序时,它都会为您提供不同的服务。我确实在 bosh/ws 服务器的底部添加了一行,以便我知道它正在侦听哪个端口,以便将其添加到 Strophe 连接 URL ("wss://votebot-web-app-bosh.herokuapp.com:53721/http-bind/")。但是,尝试连接时,我只是收到“无法建立与服务器的连接”错误。感谢您的回答。

以上是关于使用 Strophe.js 建立 WebSocket 连接的主要内容,如果未能解决你的问题,请参考以下文章

使用 Xmpp、strophe.js 进行聊天应用

将 Strophe.js 与 React Native 一起使用

当用户同一用户多次登录时,strophe.js 不调用断开连接

使用 Strophe.js 名册插件和 Ejabberd 接收“订阅”状态

strophe.js,我使用 attach() 来恢复 Bosh 会话,但将“状态”附加到 CONFAIL 和 DISCONNECTED

Strophe.js 注册插件不起作用