我有一个与服务器建立websocket连接的网页。我必须确保该站点的用户只能建立单个连接,因此打开新选项卡并导航到同一页面将关闭之前的连接。
我正在考虑维护一个以会话ID为关键字的地图;然而,随着越来越多的客户端连接,地图必须不断调整大小,我担心它会出现性能问题,并且由于它可以同时访问,因此您可能需要进行某种锁定。
有关确保每个客户端唯一连接的高效方法的任何想法?很想听听建议,谢谢。
答案 0 :(得分:0)
我不会担心问题中概述的解决方案的性能。如果要关闭先前的连接,则无法维护服务器端映射。假设您使用的是单个服务器并且您正在使用Gorilla websocket包,则以下代码应该可以解决这个问题:
$(".timeline li").each(function(){
$this = $(this);
$this.mouseover(function(){
$("table.services tr:eq("+($(this).index() + 1)+")").css('background','red');
});
$this.mouseout(function(){
$("table.services tr:eq("+($(this).index() + 1)+")").css('background','transparent');
});
});
与接受传入网络连接,完成websocket握手以及场景中发生的所有其他操作相比,更新此映射的成本很低。