Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript WebSocket如何处理同一浏览器的两个选项卡_Javascript_Php_Node.js_Cookies_Websocket - Fatal编程技术网

Javascript WebSocket如何处理同一浏览器的两个选项卡

Javascript WebSocket如何处理同一浏览器的两个选项卡,javascript,php,node.js,cookies,websocket,Javascript,Php,Node.js,Cookies,Websocket,我有 1台PHP服务器(提供http请求)和 1 node.js发布更新的数据消息(每个连接都有WebSocket) php服务器设置其cookie。在一个浏览器中,此cookie可用于所有选项卡 当浏览器向域打开了两个选项卡时,只有一个cookie标识浏览器,但必须向每个选项卡发送一条更新数据消息 区分选项卡的传统方法是什么? 我应该使用另一个cookie(由node.js管理)来区分每个浏览器选项卡吗? 把我的评论变成答案 每个选项卡都有一个单独的websocket。这就是区分不同选项卡

我有

  • 1台PHP服务器(提供http请求)和
  • 1 node.js发布更新的数据消息(每个连接都有WebSocket)
php服务器设置其cookie。在一个浏览器中,此cookie可用于所有选项卡

当浏览器向域打开了两个选项卡时,只有一个cookie标识浏览器,但必须向每个选项卡发送一条更新数据消息

  • 区分选项卡的传统方法是什么?
  • 我应该使用另一个cookie(由node.js管理)来区分每个浏览器选项卡吗?

  • 把我的评论变成答案


    每个选项卡都有一个单独的websocket。这就是区分不同选项卡的方法。如果要在服务器中为每个选项卡保留单独的状态,并且希望允许同一用户进行多个连接,则必须为每个websocket连接保留状态(可以使用websocket id),而不是为每个用户保留状态

    您不需要为每个选项卡创建单独的cookie,因为websocket本身已经作为每个选项卡的唯一id

    你没有说你的应用程序是否希望所有标签中的状态都相同,或者每个标签的状态都不同,你会根据需要在服务器端处理一些不同的事情。如果希望所有选项卡都接收相同的数据,那么无论何时向客户端发送数据,都必须找到与给定用户关联的所有WebSocket,并向它们发送相同的数据

    如果希望每个选项卡独立运行,则只需保持每个websocket的服务器端状态,并仅向响应所属的websocket发送响应,而不是向与该用户关联的所有websocket发送响应


    就像这里几乎所有的问题一样,如果你告诉我们更多你实际上在做什么,而不是进行理论对话,那么回答更具体的问题就容易多了。例如,如果我们知道你的应用程序应该如何使用不同的选项卡,那么我们就知道应该遵循哪个行为路径。

    你应该为每个选项卡使用不同的websocket。每个选项卡中的每个页面都将创建自己与服务器的websocket连接(websocket不在选项卡之间共享)。然后由服务器将该用户的任何数据发送到与目标用户关联的每个websocket。如果广播,则不需要单独的标识。如果你需要个人id,那么你需要更多的cookies/otkens@jfriend00但如何区分每个选项卡实例,因为cookie是跨选项卡共享的,我想每个javascript环境(每个选项卡)都必须在连接上标识自己?那么,如何区分从一个选项卡收到的请求,以避免再次向该选项卡发送他们刚刚请求的更新数据?@dandavis什么是otkens?如果您指的是令牌,那么应该如何处理这个离散元素,在每个websocket连接上建立,然后在每个php请求上提供?每个选项卡都有一个单独的websocket。这就是你区别的方式。如果要在服务器中为每个选项卡保留单独的状态,并且希望允许同一用户进行多个连接,则必须为每个websocket连接而不是每个用户保留状态。您不需要为每个选项卡创建单独的cookie,因为websocket本身已经作为每个选项卡的唯一id。