我们有一个包含聊天的应用程序。我们正在使用 Node.JS 的 IO Socket 向客户端进行推送。客户端在通过身份验证后,以他/她的 id 作为房间的标识符连接到房间。我们这样做是因为有一些单身人士会向客户端推送一些通知,与他/她的会话无关。聊天的 spring bean 是 SessionScoped。当同一个客户端使用两个不同的浏览器登录系统时,我们面临的问题就会发生。创建了两个会话,所以有两个聊天的spring bean在运行。由于两个 bean 都推送到由用户 id 标识的房间,因此在客户端,相同的消息会到达两次。重复消息的数量随着浏览器数量的增加而增加。
所以,我想为 Spring 创建一个自定义范围。此范围必须在使用相同登录名登录的所有客户端之间共享,并且必须在使用此登录名登录的所有会话被销毁时立即销毁。
我认为这个范围需要一个包含每个登录的所有会话的映射,并且它需要监听这些会话的销毁。有人可以帮我弄这个吗?