单页应用程序,http或websockets是连接/表达的?

Ant*_*lad 5 connect websocket node.js express socket.io

这是涉及单页网页应用的问题,我的问题是粗体.

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

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

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

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


而不是此身份验证工作流程:

  1. 从邮寄请求中获取电子邮件和密码.
  2. 通过电子邮件查询您选择的数据库以获取其密码哈希.
  3. 比较哈希.
  4. 重定向到"确定!" 或"NOPE!".
  5. 如果没问题,请存储会话信息,让connect.session()处理其余部分.

它现在变成:

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

通过使用connect,我们还能从中受益?这是我常用的清单:

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

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

现在是否真的有什么阻止我们使用一个基于http的index.html文件来封装websocket连接并且根本不依赖于连接?如果你想要一个单页应用程序同时通过其自动神奇的后备提供跨浏览器支持,socket.io真的能够使这种类型的应用程序架构无需设置你自己的HTTP restful API吗?

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

Ste*_*ell 0

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

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