运行多个实例的网站干扰(JavaScript)

运行多个实例的网站干扰(JavaScript),javascript,jquery,backend,crow,Javascript,Jquery,Backend,Crow,我对JavaScript比较陌生,但我正在本地主机上创建一个简单的hangman web应用程序。游戏运行得很好,正如我所希望的那样。然而,我意识到,在不同的标签中同时加载游戏后,所有情况下的单词都变为同一个单词。例如,我可以在一个选项卡上运行游戏,然后在另一个选项卡上运行。当我回到第一个标签时,我想猜的单词已经变成了第二个标签中的单词。我不知道如何描述我的问题。以下是我的JS和后端代码: JS 函数runHangmanInit(){ $.get(“/hangmanInit”,{},函数(响应)

我对JavaScript比较陌生,但我正在本地主机上创建一个简单的hangman web应用程序。游戏运行得很好,正如我所希望的那样。然而,我意识到,在不同的标签中同时加载游戏后,所有情况下的单词都变为同一个单词。例如,我可以在一个选项卡上运行游戏,然后在另一个选项卡上运行。当我回到第一个标签时,我想猜的单词已经变成了第二个标签中的单词。我不知道如何描述我的问题。以下是我的JS和后端代码:

JS

函数runHangmanInit(){
$.get(“/hangmanInit”,{},函数(响应){//生成单词
term.write(“RUNNING HANGMAN.cpp\r\n”);
猜字母=[];
让json=json.parse(响应);
log(json);
term.write(json[“state”]+“\r\n”);
编写(“类别:+json[“类别”]+“\t”);
for(设i=0;i
后端(Crow C++)

intmain(intargc,char*argv[]){
crow::SimpleApp;
博弈=博弈(1);
CROW_路线(应用程序,“/hangmanInit”)([](施工请求和请求、响应和回复){
nlohmann::json x;
game.init();
x[“word”]=game.getWord();
x[“状态”]=game.board.hangman;
x[“category”]=game.categoryName;
x[“破折号”]=game.board.dash.size();
x[“猜测”]=6;
x[“message”]=“输入您的猜测:”;
res.sendJSON(x);
});
CROW_路线(应用程序“/hangman/”)([])(常量请求和请求、响应和回复、字符串字母){
nlohmann::json x;
x=游戏。游戏(字母);
res.sendJSON(x);
});

我包括了代码的所有相关部分。如有任何帮助,我们将不胜感激。

看起来您只创建了一个游戏实例?因此,是的,服务器端只有一个实例,您将在所有客户端之间共享它

HTTP是无状态的,因此您首先需要一种方法来识别发出请求时哪个客户端是哪个客户端。这通常是通过某种会话ID来完成的,应该随机生成会话ID

在cookie中存储此会话ID是很常见的,但实际上,当页面加载时,您只需要在JavaScript中使用一个局部变量,因为您希望以不同的方式对待每个选项卡

从这里开始,当您发出HTTP请求时(您正在使用
$.get()
),您需要包含此会话ID。我建议将其放入URL中,类似于:

/hangman/<some-game-id-here>/<some-route>
/hangman//

最后,在服务器端,您需要跟踪多个游戏实例…每个游戏一个实例,并将它们与会话ID关联。

看起来您只创建了一个游戏实例?因此,是的,服务器端只有一个实例,您在所有客户端之间共享它

HTTP是无状态的,因此您首先需要一种方法来识别发出请求时哪个客户端是哪个客户端。这通常是通过某种会话ID来完成的,应该随机生成会话ID

在cookie中存储此会话ID是很常见的,但实际上,当页面加载时,您只需要在JavaScript中使用一个局部变量,因为您希望以不同的方式对待每个选项卡

从这里开始,当您发出HTTP请求时(您正在使用
$.get()
),您需要包含此会话ID。我建议将其放入URL中,类似于:

/hangman/<some-game-id-here>/<some-route>
/hangman//

最后,在服务器端,您需要跟踪多个游戏实例…每个游戏一个,并将它们与会话ID关联。

这很有意义。谢谢!在服务器端,我是否应该不使用全局游戏变量,而是使用每个会话ID将其设为本地?您可以保留这些游戏实例的全局哈希。如果如果是一个真实的项目,您可能会将会话数据存储在外部,这样即使应用程序服务器重新启动也可以检索。这是有道理的。谢谢!在服务器端,我应该不使用全局游戏变量,而是将其与每个会话ID一起放在本地吗?您可以保留这些游戏实例的全局哈希。I如果这是一个真实的项目,您可能会将会话数据存储在外部,这样即使应用服务器重新启动,也可以检索会话数据。
/hangman/<some-game-id-here>/<some-route>