【问题标题】:Porting node.js server-side code to HTML5 WebSockets将 node.js 服务器端代码移植到 HTML5 WebSockets
【发布时间】:2011-05-10 11:36:55
【问题描述】:

注意:这不是关于同时使用 node.js 和 HTML5 套接字。我也没有兴趣讨论我所描述的设置的优点。

node.js 在服务器上运行,并且由于它支持通过套接字连接作为客户端,它可以充当 HTML5/JS 客户端和使用 TCP/IP 的服务器之间的中间层(例如数据库服务器。)因此,node.js 和 WebSockets 都包含打开到服务器的套接字连接的方法。

我的问题是,有没有人成功地将 node.js 脚本移植到 WebSockets,即从等式中删除 node.js,以便您的 Web 浏览器直接连接到数据库?我想它会是这样的:

  1. 删除与 HTTP 相关的所有内容
  2. 移植所有 node.js 特定函数的用法以使用 WebSockets API

如果已经这样做了,是不是很麻烦,还是 node.js 和 WebSockets API 比较相似?

【问题讨论】:

    标签: javascript sockets html node.js websocket


    【解决方案1】:

    您的问题有点难以解析,但我会尝试一下。

    如果您有兴趣从 WebSockets 客户端(浏览器)连接到任意 TCP 套接字服务器,那么您可能会对 wsproxy 感兴趣,它是一个通用的 WebSockets 到 TCP 套接字代理。 wsproxy 包含在noVNC(HTML5 VNC 客户端)中,并且在 C、python 和 Node (node.js) 中具有三个参考实现。

    如果您有兴趣将 WebSockets 支持添加到特定的给定服务器(即数据库服务器),那么您可能会找到 this fork of libvncserver。它支持使用 WebSockets(即 noVNC)的客户端,因此不需要代理。

    基本的 wsproxy 代理功能很容易实现。最棘手的部分是当前使用的 WebSockets 草案 (v76) 没有指定二进制传输有效负载(仅 UTF-8),因此 wsproxy base64 对进出 WebSockets 客户端的所有流量进行编码/解码。在 libvncserver 中实现 WebSockets 连接有点棘手,因为 libvncserver 有一些关于缓冲/成帧的硬编码想法需要解决。

    免责声明:我负责 noVNC、wsproxy 和 libvncserver 的 WebSockets 补丁。

    【讨论】:

    • 起初,我想问,“为什么需要代理?”您的文档说 wxproxy “将 WebSockets 流量转换为正常的套接字流量”,而 WebSockets 流量不是正常的套接字流量的概念对我来说是新的。我认为 WebSockets 的整个想法是它们是普通的套接字。那么服务器总是需要明确支持 WebSockets 呢?真不幸……我想知道为什么会这样……
    • (我想这就是您无法解析我的问题的原因……感谢您使用它。)
    • 是的,除了握手(包括原始信息并使 WebSockets 对 HTTP 升级更友好)之外,WebSockets 帧的前导 0(零)和尾随 255。我的理解是具有更高级别框架使协议更容易使用。例如,VNC/RFB 真的很难使用,因为没有框架。事实上,WebSockets 协议的下一次迭代不仅会被框架化,而且可能会有一个带有有效负载类型和长度信息的标头(而不是像当前那样使用帧分隔符)。不过,这个名字并没有帮助混淆。
    猜你喜欢
    • 2019-08-26
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多