【问题标题】:Is it a good practice to use Socket.IO's emit() instead of all HTTP requests?使用 Socket.IO 的 emit() 而不是所有 HTTP 请求是一个好习惯吗?
【发布时间】:2013-03-16 08:53:27
【问题描述】:

我设置了一个 Node.js HTTP 服务器。它侦听路径“/”并在获取请求时返回一个空的 HTML 模板。

此模板包含 Require.js 客户端脚本,它创建与服务器的 Socket.IO 连接。

那么客户端和服务器之间的所有通信都是由Web Sockets提供的。

连接时,服务器需要身份验证;如果有身份验证cookie,则客户端将它们发送到服务器进行验证,如果没有cookie,则客户端呈现登录视图并等待用户输入等。

到目前为止一切正常,在验证凭据后,我为用户创建了一个 SID 并使用它来管理他的访问权限。然后我渲染主视图并启动应用程序。

问题:

  • 是否需要使用 HTTPS 而不是 HTTP,因为我只使用 HTTP 向客户端发送脚本? (注意:我打算使用本地存储而不是 cookie)

  • 在没有 HTTP 的情况下使用纯 Web 套接字有什么缺点吗?

  • 如果它有效,为什么没有人使用它?

【问题讨论】:

    标签: node.js http websocket socket.io


    【解决方案1】:

    你的问题和这个很相似

    Why use AJAX when WebSockets is available?

    归根结底,它们都是为不同的事物而创建的,尽管您可以在大多数情况下使用 Web 套接字,如果不是在正常 HTTP 请求中可以完成的所有事情的话。

    我建议您使用 HTTPS,因为您似乎确实通过 websockets 发送身份验证数据(这也将使用 SSL,不是吗?)但这取决于您对“需要”的定义。

    缺点 - 缺乏对旧浏览器的支持

    在许多其他情况下没有使用 this this ,因为它不是必需的,而且它仍然“相对较新”。

    【讨论】:

    • 但是 Socket.IO 的连接不是已经安全了吗? HTTPS 会不会浪费,因为握手后 WSS 连接会建立? (注:根据link
    • Web 套接字连接只有在使用 SSL 时才会受到保护,因此无论如何您都需要 SSL 证书,还不如为服务器添加 HTTPS。
    • 谢谢,我不知道。就像你建议的那样,我正在切换到 HTTPS。
    【解决方案2】:

    是否需要使用 HTTPS 而不是 HTTP,因为我只使用 HTTP 向客户端发送脚本? (注意:我打算使用本地 存储而不是 cookie)

    不,websockets 的握手需要 HTTP/HTTPS。选择 HTTP 或 HTTPS 是从安全角度考虑的。如果您想使用它来简单地发送脚本,那么没有什么坏处。如果您想在页面中实现用户登录/身份验证,则应使用 HTTPS。

    在没有 HTTP 的情况下使用纯 Web Sockets 有什么缺点吗?

    Web 套接字和 HTTP 非常不同。如果您使用纯 Web 套接字,您将错过 HTTP。 HTTP 是跨平台 Web 服务的首选。它有利于文档遍历/检索,但它是一种方式。 Web 套接字通过单个 TCP 连接提供全双工通信通道,并允许我们摆脱 Ajax、Reverse Ajax、Comet 等变通方法和黑客攻击。需要注意的重要一点是两者可以共存。所以瞄准网络套接字而不遗漏 HTTP。

    如果它有效,为什么没有人使用它?

    我们生活在 HTTP 时代,Web 套接字相对较新。从长远来看,Web 套接字将越来越流行,并在 Web 服务中占据更大的份额。许多浏览器直到最近才正确支持 Web 套接字。请参阅here,IE 10 是 IE 中支持 Web 套接字的最新且唯一的版本。 nginx,一个广受欢迎的服务器,直到 2013 年 2 月至 3 月才支持 web sockets。web sockets 成为主流需要时间,但它会。

    【讨论】:

    • 谢谢回复,很全面。跨平台的争论决定了我的解决方案,但我同意你的观点,未来属于网络套接字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 2014-07-24
    相关资源
    最近更新 更多