单页应用程序,http 或 websockets,是否完成了 connect/express?

问题描述 投票:0回答:2

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

警告: 我不是这个主题的专家,如果我对 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. 发出一声“好!”或“不!”活动。
  6. 如果可以的话,做一些我现在不会想到的事情,但应该可以达到相同的效果?

使用 connect 还能给我们带来什么好处?这是我常用的列表:

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

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

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

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

node.js express websocket socket.io node.js-connect
2个回答
1
投票

查看 DerbySocketStream


0
投票

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

答案是“是”,它可以工作。一些 Node.js Web 框架已经做到了这一点,尽管我不知道有哪个框架使用了 socket.io。

© www.soinside.com 2019 - 2024. All rights reserved.