javascript - 使用带有快递的帖子:我想从用户那里接收数据,然后使用新文件将该数据发送回用户
问题描述
我正在创建一个桌面纸牌游戏的 node.js 网页,我最初在后端构建了应用程序,同时一次只能处理一个游戏(因为我一次只测试一个)。既然我正在合并前端,并且需要一次处理多个游戏的能力,我正在努力解决如何接收用户的姓名和 ID 代码并创建或加入特定游戏,同时仍然记住客户端玩家自己是谁:
早期算法:
-- 拥有全局变量 player 并使用 post req 更新到用户输入的名称(通过 express)。
--发送用户gameView.html文件
--从那里(客户端) const socket = io.connect(), socket.emit('newPlayer', socket.id)
--创建一个连接socket id和全局变量player的播放器对象
--将全局播放器变量重置为“”
--继续等待其他玩家
显然这是非常草率的做法,仅用于后端的开发。现在我需要处理多个用户和游戏,我的算法(理想情况下)可以这样工作:
--用户通过 prePlayView.html 文件发布他们的姓名和 id 代码
--向用户发送gameView.html文件以及输入的名称和ID(这是我不确定如何实现的部分,因为在发送新文件后套接字ID发生了变化,因此无法在服务器端进行跟踪)
-- 在客户端, const socket = io.connect(), socket.emit('newPlayer', name, id);
--如果 id 为空,则创建具有唯一 id 的游戏对象并存储在具有键 id 的游戏字典中并添加玩家
有任何想法吗?我从根本上错过了什么吗?我对 node.js 相当陌生。
这是我当前的实现供参考:
var app = express();
app.set('port', 5000);
// called when a player enters the game
app.post("/userView.html", function(req, res) {
var body = "";
req.on('data', function(char) {
body += char;
});
req.on('end', function () {
var playerName = body.substr(body.indexOf("=") + 1, body.indexOf("&") - 4);
var id = body.substr(body.indexOf("&") + 4, body.length);
body = "";
var options = {
headers: {
'id': id,
'names': playerName
}
}
res.sendFile(path.join(__dirname, 'userView.html'), options);
});
解决方案
我将假设您正在使用套接字在服务器和客户端之间进行通信。
没错,如果您想一次处理多个游戏,则不能在服务器上使用全局变量来存储当前注册用户的详细信息。使用这种策略,一次只有一个玩家可以在服务器上注册。
更好的策略是记住哪些客户端过去连接到服务器,以及当他们发出请求时,仅在请求期间临时加载其信息,并且仅在服务器的快速路由处理程序范围内。
我很高兴向您介绍会话的概念。您可以使用它们来记住有关先前连接的客户端的信息。有一个将会话添加到 express 的中间件,称为express-sessions。此外,假设您使用的是 sockets.io,还有一个关于使用 socket.io 和 express-session的常见问题解答。
我无法涵盖您必须在此处更改架构以同时支持多个游戏的所有内容,但学习和利用会话是一种可能的途径。请慢慢来,一次咬下一块。学习如何构建网络应用程序来做你想象的事情可能很困难,一次只关注一个步骤是必要的:)
推荐阅读
- html - 如何使用 HTML / Bootstrap 在图像网格中提供空格
- javascript - 最小化导入大小 (js)
- php - 尝试在安装 voyager 后运行 php artisan migrate:fresh 它给了我这个错误
- ruby-on-rails - Rails ActiveRecord::PendingMigrationError 上的迁移错误 ruby
- r - 创建直方图矩阵:无 id 变量;使用所有作为测量变量
- vba - 对包含双引号的记录使用 FindRecord
- python - 如何调整我的刮板在 .csv 上的显示方式?
- c++ - 从给定的字符串返回特定子字符串的模式?
- python - 如果重新实例化,则在 python 中处理类删除
- python - 如何让 selenium 尝试 2 xpath 并获得正确的