【问题标题】:node.js, socket.io - Web site architecturenode.js, socket.io - 网站架构
【发布时间】:2015-07-13 11:54:32
【问题描述】:

我有一个网站,我希望有一个用户系统,无论用户在网站的哪个位置,都可以在其中登录

使用socket.io,我发现每个HTML页面都需要自己的socket.io连接。所以每次用户离开一个 HTML 页面到另一个页面时,他都会断开第一个套接字并连接另一个。

保持这种联系的最佳方式是什么?我不希望用户手动登录每个 HTML 页面。我假设将登录数据作为 HTML 参数传递并使用这些参数自动登录到服务器非常愚蠢,但目前这是我能想到的唯一解决方案。

理想情况下,socket.io 将在整个站点上使用相同的套接字。

我认为我错过了一些东西,考虑到所有具有用户系统的网站都具有所需的功能。

【问题讨论】:

  • 如果您使用 Node 进行身份验证,最好的选择是使用可用的库之一,例如 passportjs.org 因为套接字连接是在每个请求开始时创建的,每次用户对不同页面发出新请求,这将重置套接字连接。解决此问题的唯一方法是通过 AJAX 加载页面,而不是使用回发。
  • 您应该考虑通过 Angular.js 之类的框架将您的 Web 应用程序构建为客户端应用程序,这样可以更轻松地配置要在所有路由上连接的套接字 |页面。
  • 如何更容易?
  • 您应该查看单页应用程序。像那些使用 Angular 的人

标签: html node.js sockets socket.io server


【解决方案1】:

这里有两点很重要:

  • 套接字重置和
  • 身份验证。

套接字断开

如果您离开该页面,则会断开连接。时期。你不能改变它,如果你的页面是不同的,你的套接字每次都会重新连接。 解决此问题的一种方法是创建一个 SPA - 具有 angular 或 ember 等框架的单页应用程序。它基本上是客户端路由 - 捕获您的点击并显示不同的“页面”而无需重新加载。除了保持套接字打开之外,您还可以获得不必重新加载所有共享资产、网络开销等的好处,这对移动设备来说是额外的好处。

但你不必这样做。

认证

正如其他人所建议的那样,您的实际问题是您的身份验证机制做得不够。 即使您的套接字被重置,您的新套接字也需要重新验证。有些图书馆可以完成这项工作,也可以自己完成。它可以是一些简单的事情,比如获取 cookie 或某种身份验证令牌,这是您在使用套接字连接发送的第一个身份验证时获得的(如果存在的话)。然后根据这个值进行身份验证。

通过这样的身份验证设置,您可以在常规调用和套接字调用之间共享身份验证,并在所有页面和页面重新加载时保持身份验证。

【讨论】:

    猜你喜欢
    • 2016-05-01
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    • 2016-01-01
    • 2010-11-08
    • 1970-01-01
    • 2012-07-14
    相关资源
    最近更新 更多