【问题标题】:Single page applications, http or websockets, is connect/express done for?单页应用程序,http 或 websockets,是否已完成 connect/express?
【发布时间】:2012-04-04 03:38:31
【问题描述】:

这是一个涉及单页网络应用程序的问题,我的问题以粗体显示。

警告: 我不是这方面的专家,如果我对 HTTP 和 WebSockets 工作原理的理解有误,请纠正我。

我对 HTTP RESTful API 工作原理的理解是它们是无状态的。我们使用 connect.session() 之类的工具将某种类型的状态插入到更高级别的应用程序中。由于每一个请求都是新的,我们需要一种方法来向服务器重新识别自己,因此我们创建了一个可以来回发送的唯一令牌。

Connect 的会话中间件以一种非常酷的方式为我们解决了这个问题。将其放入您的中间件堆栈中,您就会为整个应用程序的每个请求附加很棒的酱汁会话。进行一些握手,您可以相当轻松地将会话信息传递给 socket.io,甚至更棒。使用 RedisStore 保存信息以将其与您的连接/快速应用程序分离,它甚至更棒。我们在这里谈论双彩虹真棒。

所以现在理论上您可以拥有一个不依赖于连接/会话的单页应用程序,因为在处理 websocket 时您不需要超过 1 个会话(初始握手)。 socket.io 已经让你可以轻松访问这个 sessionId,问题解决了。


代替此身份验证工作流程:

  1. 从发布请求中获取电子邮件和密码。
  2. 通过电子邮件查询您选择的数据库以获取其密码哈希。
  3. 比较哈希值。
  4. 重定向到“确定!”或“不!”。
  5. 如果正常,则存储会话信息并让 connect.session() 处理大部分其余部分。

现在变成:

  1. 监听登录事件。
  2. 从事件回调中获取电子邮件和密码。
  3. 通过电子邮件查询您选择的数据库并获取其密码哈希。
  4. 比较哈希值。
  5. 发出“OK!”或“不!”事件。
  6. 如果可以,做一些我现在不会想到但同样的效果应该可能的事情吗?

使用 connect 还能让我们获得什么好处?以下是我常用的列表:

  • 开发模式记录器
  • 网站图标
  • 正文解析器
  • 静态服务器
  • passport(一个依赖于 connect/express 的身份验证库,类似于everyauth 提供的)

加载初始单页应用程序的代码将处理设置静态服务器和网站图标。像护照这样的东西实施起来可能更棘手,但肯定不是不可能的。我列出的所有其他内容都无关紧要,您可以轻松实现自己的 websocket 调试记录器。

现在真的有什么阻止我们拥有一个基于 http 的 index.html 文件,该文件封装了一个 websocket 连接并且根本不依赖于连接吗? 如果您想要一个单页应用程序,同时通过其自动魔法回退提供跨浏览器支持,socket.io 真的能够在不设置自己的 HTTP RESTful API 的情况下使这种类型的应用程序架构工作吗?

此时唯一真正的缺点是在客户端缓存结果,对吗?你不能为此合并本地存储吗?我认为为搜索引擎创建可索引/可抓取的内容页面不会有什么大不了的——你基本上会创建一个从你的持久数据库创建静态 html 文件的工具,对吧?

【问题讨论】:

    标签: node.js websocket express socket.io connect


    【解决方案1】:

    查看DerbySocketStream

    【讨论】:

    • 是的,我一直在关注 socketstream。
    【解决方案2】:

    我认为您要问的是(使用 socket.io)创建一个具有动态变化内容的单个静态页面的网站是否合理。

    答案是“是的”,它可以工作。几个 node.js web 框架已经这样做了,虽然我不知道有任何使用 socket.io。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-28
      • 1970-01-01
      • 2012-03-01
      • 1970-01-01
      • 2016-09-04
      • 2021-11-25
      • 2016-06-28
      相关资源
      最近更新 更多