将node.js服务器端代码移植到HTML5 WebSockets

4
注意:这不是关于同时使用node.js和HTML5 sockets的问题。我也不感兴趣讨论我所描述的设置的优点。
node.js运行在服务器上,并且因为它支持作为客户端通过sockets连接,所以它可以作为HTML5/JS客户端和使用TCP/IP(如数据库服务器)的服务器之间的中间层。因此,node.js和WebSockets都包括了一种打开与服务器的socket连接的方法。
我的问题是,是否有人成功地将一个node.js脚本移植到WebSockets上,即将node.js从方程式中剔除,使您的Web浏览器直接连接到数据库?我想它会像这样:
1. 剪切与HTTP相关的所有内容 2. 将所有特定于node.js的函数的用法移植到使用WebSockets API
如果已经完成了这项工作,那么它是否很麻烦,或者node.js和WebSockets API是否相对类似?
1个回答

4

您的问题有点难以理解,但我会尝试回答。

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

如果您想要为特定的服务器(即数据库服务器)添加WebSockets支持,则可能会发现libvncserver的这个分支很有用。它支持使用WebSockets(即noVNC)进行通信的客户端,因此不需要代理。

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

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


起初,我打算问:“你为什么需要代理?” 你的文档说wxproxy“将WebSockets流量转换为普通套接字流量”,而WebSockets流量不是普通套接字流量的概念对我来说是新的。我以为WebSockets的整个想法就是它们是正常的套接字。那么服务器总是需要显式支持WebSockets吗?这很不幸...我想知道为什么要这样做... - Kev
我猜这就是你在解析我的问题时遇到困难的原因...感谢你的合作。 - Kev
除了握手(包括源信息,使WebSockets更加HTTP升级友好)之外,WebSockets帧具有前导0(零)和尾随255。我的理解是,具有更高级别的框架使协议更易于使用。例如,VNC / RFB很难使用,因为没有框架。实际上,WebSockets协议的下一个版本不仅将被框架化,而且可能会有一个带有有效负载类型和长度信息的头部(而不是像当前版本一样使用帧分隔符)。名称并没有帮助消除混淆。 - kanaka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接