小编coo*_*eze的帖子

如何使用akka管理用户的游戏状态

我试图弄清楚如何使用akka管理用户游戏状态.

游戏状态将持久保存到mysql,这不会改变,因为我们有其他需要此服务.

游戏中发生的任何事情都被视为"事件".

那么你我有一个人可以达到的"水平".完成与其关联的所有"事件"后,将达到一个级别.

所以你有了:

Level
 - event1  e.g. reach a point in the game
 - event2  e.g. pickup a sword
 - event3  e.g. defeat a monster
Run Code Online (Sandbox Code Playgroud)

所以在游戏中有很多级别,以及与级别相关的100个事件.

所以所有"事件"都通过HTTP发送到我的后端,我将事件保存在数据库中.

然后我必须在内存中加载用户游戏配置文件,然后重新计算自发生新事件以来所达到的等级. 注意:这个计算不能在数据库级别完成,因为我在这里写的有点复杂.

我看到的问题是,如果我使用akka,我不能让多个actor为同一个用户处理事件,因为数据可能变得陈旧.

为了清楚起见,所以当一个新事件到来时,我必须在内存中加载游戏配置文件,遍历各个级别并查看是否已经实现了它们,如果有,则更新数据库

e.g. update levels set achieved=true where level_id = 123 and user_id=234
Run Code Online (Sandbox Code Playgroud)

例如,actor1加载配置文件(该用户的所有级别和事件),然后处理刚到达收件箱的新事件.同时,actor2加载配置文件(与actor1相同),然后处理新事件.当它持续更改mysql时,数据将不在sych中.

如果我使用线程,我将不得不在游戏配置文件计算期间锁定并持久保存到数据库.

我怎样才能使用Akka做到这一点并能够并行处理,或者这个场景是不允许的?

scala akka

2
推荐指数
1
解决办法
206
查看次数

如果要禁用vim插件,是否容易切换?

我真的很想使用vim插件,但是在安装它之前,我只想知道打开/关闭它有多容易?

它会弄乱任何键绑定吗?或者当我打开/关闭它时,它会很好地还原所有内容而没有问题吗?

vim intellij-idea

2
推荐指数
2
解决办法
726
查看次数

为什么使用Playframework转换为JSON如此冗长?

我只是比较如何在java中将对象序列化和反序列化为JSON.

ObjectMapper mapper = new ObjectMapper();
String jsonInString = "{'name' : 'john smith'}";

User user = mapper.readValue(jsonInString, User.class);
Run Code Online (Sandbox Code Playgroud)

使用Playframework和Scala,我必须创建这些读取和写入映射器,它们非常冗长.(参见:https://www.playframework.com/documentation/2.5.x/ScalaJsonHttp)

为什么它不能像java w/Jackson一样"工作"?

我有我的模型,我想简单地读/写然后到JSON.使用Java,我没有任何样板代码可供编写.

json scala playframework playframework-json

1
推荐指数
1
解决办法
124
查看次数

当用持续时间调用Await.Result时,它如何忽略未来?

你打电话的时候

Await.result(myFuture, DURATION)
Run Code Online (Sandbox Code Playgroud)

在播放应用程序内部,当持续时间到期时,幕后会发生什么?

netty是否会在/返回时忽略响应?

scala future playframework

1
推荐指数
1
解决办法
2734
查看次数

试图看出有多宽和瘦的行被展开

当你为宽行和瘦行设计表时,有人可以给出并告诉我数据是如何布局的.

我不确定我是否完全掌握数据如何以"宽"行展开.

在如何获取数据方面是否存在差异,或者它是否相同,即如果它是有序的,则数据是垂直(瘦)还是水平(宽)组织无关紧要.

更新 是否考虑了主键是否包含多个列?或者,只有当分区键是复合分区键时,表才会有宽行?

cassandra

1
推荐指数
1
解决办法
624
查看次数

如果列表中的所有项都为true,则返回true,否则返回false

如果"inStock"键存在并且列表中的所有值都为真,我想返回true.如果没有,则返回false.

val product = Map("ids" -> List("1" ,"2", "3"), "inStock" -> List("true", "false", "true", "true"))

product.get("inStock").map(x => x.forall(true))  // doesnt' work currently

<console>:13: error: type mismatch;
 found   : Boolean(true)
 required: String => Boolean
Run Code Online (Sandbox Code Playgroud)

我还应该安全地将字符串值解析为布尔值,如:

Try(x.toBoolean)
Run Code Online (Sandbox Code Playgroud)

scala

1
推荐指数
1
解决办法
4733
查看次数

删除不包含集合中任何值的键

val s = Set("blue", "orange")
val m = Map("product_orange_123" -> 1, "prodoct_blue_123" -> 2, "product_green_123" -> 5, "product_blue_887" -> 7)
Run Code Online (Sandbox Code Playgroud)

我想删除地图中不包含集合中任何值的任何键.

预期产量:

("product_orange_123" -> 1, "prodoct_blue_123" -> 2, "product_blue_887" -> 7)
Run Code Online (Sandbox Code Playgroud)

scala

1
推荐指数
1
解决办法
112
查看次数

docker如何在osx上运行,它是否使用了vagrant?

我使用较旧型号的MB Air和运行流浪者对我来说是非常耗费资源的.

在OSX上使用docker时,它是否只是在幕后使用vagrant在ubuntu上运行我的docker实例?

macos docker

1
推荐指数
1
解决办法
564
查看次数

我的类似乎没有使用API​​的JSON响应正确映射,而不是绑定

我遇到了反序列化JSON响应的问题.

userResponse = JsonConvert.DeserializeObject<UserResponse>(result);
Run Code Online (Sandbox Code Playgroud)

json响应如下:

{
    "Results" : [
        {
            "Id" :  1,
            "Name" : "John",
            "Age"  : 50
        }
    ],
    "Paging" : {
        "TotalPages" : 5,
        "CurrentPage" : 1
    }
}
Run Code Online (Sandbox Code Playgroud)

我的UserResponse类假设绑定到上面的JSON,如下所示:

[DataContract]
public class UserResponse
{
    [DateMember(Name = "Results" )]
    public List<User> Results {get;set;}

    [DateMember(Name = "Paging" )]
    public Paging Paging {get;set;}

}

[DataContract]
public class User
{
    public int Id {get;set;}
    public string Name {get;set;}
    public int Age {get;set;}
}

[DataContract]
public class Paging
{
    public int …
Run Code Online (Sandbox Code Playgroud)

c# json json.net

1
推荐指数
1
解决办法
45
查看次数

向查询中添加WHERE子句会使查询速度变慢-即使列已建立索引

因此,用户表有4000万行。如果没有WHERE子句,下面的查询将足够快地运行(不到1秒)。如果在查询中放入WHERE子句,则大约需要10分钟才能返回结果集。我在UserType列上添加了索引,但是由于某种原因,它似乎并未影响响应时间

  CREATE INDEX idx_users_user_type ON Users (UserType);
Run Code Online (Sandbox Code Playgroud)

查询:

SELECT  TOP 100
        *
FROM Users u
    INNER JOIN Company c ON c.ID = u.CompanyID
    INNER JOIN Location l ON l.ID = u.LocationId
WHERE
    u.UserType = 'manager'
Run Code Online (Sandbox Code Playgroud)

UserType只有3个值:

manager
employee
temp
Run Code Online (Sandbox Code Playgroud)

我不希望将列更改为INT值,因为ETL流程会将数据导入到现在很难更改的表中。

sql sql-server indexing

1
推荐指数
1
解决办法
66
查看次数