使用Ruby / DataMapper对DB进行并行POST请求

时间:2017-01-18 22:29:27

标签: ruby postgresql sinatra ruby-datamapper

我正在尝试为游戏实现一种匹配的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)

对我来说棘手的部分是,当这个路由器在几个不同的客户端同时调用时,所有这些请求从

获得相同的行ID
post '/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

并且此代码为每个请求更新相同的行。

是否有一个简单的解决方案,或者我必须实现像队列这样的同时处理这样的同时请求?

我非常感谢你的建议。

0 个答案:

没有答案