node.js,socket.io – 网站架构

我有一个网站,我想有一个用户系统,无论用户在哪个网站login,都可以login

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

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

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

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

这里有两件事很重要:

  • 套接字重置和
  • authentication。

套接字断开

如果离开页面,则断开连接。 期。 你不能改变,如果你的网页是不同的,你的套接字每次都会重新连接。 解决这个问题的一种方法是创build一个带有angular或者ember的框架的SPA单页面应用程序。 这基本上是客户端路由 – 抓住你的点击,并显示不同的“页面”,无需重新加载。 除了保持套接字打开之外,您还可以获得无需重新加载所有共享资源,networking开销等的好处,这对移动设备是非常有利的。

但是你不需要。

authentication

正如其他人所说,你的实际问题是你的authentication机制还不够。 即使您的套接字被重置,您的新套接字也需要重新进行身份validation。 有些图书馆可以做这项工作,或者自己做。 它可以是一些简单的事情,比如拿起cookie或者你用你的套接字连接发送的第一个authentication(如果存在的话)上得到的某种authentication令牌。 然后validation完成对这个值。

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