单页面应用程序,http或websockets,连接/expression完成?

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

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

我对HTTP restful API的工作原理是无状态的。 我们使用像connect.session()这样的工具将某种types的状态插入到更高级别的应用程序中。 由于每一个请求都是新的,我们需要一种方法来重新标识自己到服务器,所以我们创build一个独特的令牌来回发送。

Connect的会话中间件以非常酷的方式为我们解决了这个问题。 把它放到你的中间件堆栈中,并且为每个请求附加完整的应用程序。 洒一些握手,你可以相当容易地将该会话信息传递给socket.io,更加棒。 使用RedisStore来保存信息以将其与连接/快速应用程序分离,而且更加棒。 我们在这里说双重彩虹真棒。

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


而不是这个authentication工作stream程:

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

现在变成:

  1. 听取login事件。
  2. 从事件callback中获取电子邮件和密码。
  3. 通过电子邮件查询您select的数据库并获取他们的密码哈希。
  4. 比较哈希。
  5. 发一个“OK!” 或“NOPE!” 事件。
  6. 如果确定,做一些我现在不会想到的东西,但同样的效果应该是可能的?

通过使用连接我们还能从中受益吗? 以下是我常用的列表:

  • logging器的开发模式
  • 图标
  • bodyparser
  • 静态服务器
  • 护照(取决于连接/快递的authentication库,类似于everyauth提供的)

加载初始单页面应用程序的代码将处理设置一个静态服务器和favicon。 像护照这样的东西可能会更棘手的实施,但肯定不是不可能的。 我列出的其他一切都无关紧要,您可以轻松地为websockets实现自己的debugginglogging器。

现在有什么阻止我们有一个单一的基于http的index.html文件封装一个websocket连接,并不依赖于连接呢? 如果你想要一个单一的页面应用程序,同时通过其自动魔法回退提供交叉浏览器支持,socket.io是否真的能够使这种types的应用程序体系结构工作,而无需设置自己的HTTP宁静API?

现在唯一真正的缺点是在客户端caching结果? 难道你不能为本地存储? 我认为为search引擎创build可索引/可抓取的内容页面并不是什么大不了的事情 – 你基本上会创build一个工具,从持久化数据库中创build静态html文件吗?

检查Derby和SocketStream 。

我想你所要求的是,如果它是合理的(使用socket.io)创build一个网站,是一个静态页面与dynamic变化的内容。

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