我想使用 WebSockets 连接到 irc、icq、sip 等服务。假设我在 JavaScript 中有这些协议的某种实现?那可能吗?与常规套接字相比,我似乎不了解 WebSockets 的局限性。
5 回答
不,你不能,至少不能直接。
WebSockets 允许在浏览器和 WebSocket 服务器之间进行实时消息传递,但它们有自己的第 7 层协议来封装这些消息。
它们不提供对可以实现现有协议的纯 TCP(或 UDP)套接字的访问。
绝对地!
需要注意的是,您需要在浏览器的 WebSocket 传输协议和现有服务的原始 TCP 套接字之间架起桥梁。例如,类似websockify(免责声明:我创建了 websockify)。另一个警告是 websockify 只支持 TCP 目标(WebSocket 现在只是 TCP,所以支持 UDP 目标无论如何都会有点奇怪)。
websockify 项目实际上包括两个概念验证 HTML/Javascript 页面,用于与 IRC 和 telnet 通信。如果您有兴趣利用 websockify 为一些常见的 TCP 协议构建 HTML/Javascript 客户端,我什至可以将它们作为示例拉入 websockify 存储库(假设它们编码良好并且在开源许可下。
websockify 的替代方法是将 websocket 服务器端支持直接集成到您希望与之通信的服务器中。添加支持并不是那么困难。WebSocket 有一个非常简单的框架,虽然握手与 HTTP 服务器兼容,但它实际上受到更多限制和简单,并且不需要完整的 HTTP 解析器。例如,libvncserver 0.9.9 现在支持常规 VNC 连接和基于 WebSocket 的 VNC 连接。这允许 noVNC(我也创建)直接连接到基于 libvncserver 的 VNC 服务器,而不需要 websockify。
Inspircd 有一个可以安装的非官方模块,称为m_websockets
,以允许连接。安装并设置模块的服务器将允许您通过 webbsockets 连接到服务器。
扩展@kanaka 的 websockify,这个项目似乎做到了:
使用 websocket 和 websockify 制作的 HTML5 irc 客户端。
[已] 支持自动加入、privmsg 频道、主题、加入、用户列表、部分、昵称。
不,不是 websockets,但你可以使用 http。