单页应用程序,http或websockets,是为connect/express完成的



这是一个涉及单页web应用程序的问题,我的问题是粗体。

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

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

Connect的会话中间件以一种非常酷的方式为我们解决了这个问题。将其放入中间件堆栈中,整个应用程序的每个请求都会附带很棒的酱汁会话。加上一些握手,你可以很容易地将会话信息传递到socket.io,甚至更棒。使用RedisStore保存信息,将其与您的connect/express应用程序解耦,这将更加棒极了。我们说的是双彩虹。

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


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

  1. 从帖子请求中获取电子邮件和密码
  2. 通过电子邮件查询您选择的数据库以获取其密码哈希
  3. 比较散列
  4. 重定向至"OK!"或"NOPE!"诊断树
  5. 如果可以,则存储会话信息,并让connect.session()处理大部分剩余信息

现在变成:

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

通过使用connect,我们还能从中受益什么?下面是我常用的一个列表:

  • 用于开发模式的记录器
  • 收藏夹
  • 正文分析器
  • 静态服务器
  • passport(一个依赖connect/express的身份验证库,类似于everyauth提供的)

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

现在真的有什么能阻止我们拥有一个基于http的index.html文件来封装websocket连接,并且完全不依赖于connect吗如果您想要一个单页应用程序,同时通过其自动化故障提供跨浏览器支持,socket.io真的能够在不设置自己的HTTP restful API的情况下使这种类型的应用程序体系结构正常工作吗

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

查看Derby和SocketStream。

我想你要问的是(使用socket.io)创建一个内容动态变化的静态页面网站是否可行。

答案是"是的",这是可行的。一些node.js web框架已经做到了这一点,尽管我不知道有哪个框架使用socket.io.

相关内容

  • 没有找到相关文章

最新更新