我正在尝试为游戏实现一种匹配的REST服务。 我的配对表很简单
Error: attempt to apply non-function
基本的想法是,当客户端向我发送他的“名称”时,我检查是否有一行Client_Name_2 = NULL并更新此行。 如果没有“NULL”行,我使用Client_Name_1创建新行作为收到的客户端“名称”
这是路由器代码:
ID (Serial)
Client_Name_1 (String)
Client_Name_2 (String)
对我来说棘手的部分是,当这个路由器在几个不同的客户端同时调用时,所有这些请求从
获得相同的行IDpost '/api/start' do
#parsing a request with client name
body = JSON.parse request.body.read
#checking if there is a row to update
t = Match.first(:Client_Name_2 => nil)
#matchmaking client to existing game if found
if t != nil
t.update(
Client_Name_2: body['name']
)
response = {:playerIs => '2', :id => t['id']}
#creating new game if nowhere to matchmake
elsif
m = Match.create(
Client_Name_1: body['name']
)
Task.create(
Match_ID: m['id']
)
response = {:playerIs => '1', :id => m['id']}
end
status 201
response.to_json
end
并且此代码为每个请求更新相同的行。
是否有一个简单的解决方案,或者我必须实现像队列这样的同时处理这样的同时请求?
我非常感谢你的建议。