小编fel*_*xgb的帖子

无效的Json:使用播放体解析器时,由于输入结束而没有要映射的内容

我正在尝试测试一个尝试解析请求中发送的JSON的控制器方法:

  def addRoomToProfileForTime = Action.async(parse.json[AddRoomToProfileForTimeRequest]) { request =>
    profileService.addRoomToProfileForTime(request.body.roomId, request.body.profileId, request.body.timeRange).value.map {
      case Xor.Right(_)  => Ok
      case Xor.Left(err) => BadRequest(Json.toJson(err))
    }
  }
Run Code Online (Sandbox Code Playgroud)

这是表示请求的案例类:

final case class AddRoomToProfileForTimeRequest(
  roomId: Int,
  profileId: Int,
  timeRange: TimeRange
)

implicit val addRoomToProfileForTimeRequestFormat:Format[AddRoomToProfileForTimeRequest] = Json.format
Run Code Online (Sandbox Code Playgroud)

这个代码按预期工作,我发出这样的请求:

curl -H "Content-Type: application/json" -X POST -d '{"roomId":3,"profileId":1,"timeRange":{"id":1,"fromTime":"2000-01-01T01:01","toTime":"2000-01-01T02:01"}}' http://localhost:9000/api/profiles/addRoomToProfileForTime
Run Code Online (Sandbox Code Playgroud)

但我正在尝试为这种方法编写一个测试(注意我使用macwire进行依赖注入,因此不能使用WithApplication:

"add a room to profile for time" in new TestContext {
  val roomId = 1
  val profileId = 1
  val from = "2000-01-01T01:01"
  val to = "2000-01-01T02:01"
  val …
Run Code Online (Sandbox Code Playgroud)

scala playframework

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

IOUArray to ByteSring,尽快

我需要Word8非常快速地改变固定大小数组中的元素.为此我正在使用IOUArray.我需要通过websocket连接发送这个数组.sendBinaryDatawebsockets包中的功能需要a ByteString.我需要从一个表示转换为另一个表示.我目前正在使用此功能:

arrayToBS :: IOUArray Int Word8 -> IO (BS.ByteString)
arrayToBS = (fmap BS.pack) . getElems
Run Code Online (Sandbox Code Playgroud)

此函数将数组的元素转换为[Word8]将列表打包成字节字符串之前,并且从分析中我可以看到它非常慢.我想知道是否有办法加速这个功能,或者可能直接通过websocket连接发送数组?

我目前使用的数组是:

size = 1000;
numBytes = size * size * 4

newBuffer :: IO (IOUArray Int Word8)
newBuffer = newArray (0, numBytes) 200 :: IO (IOUArray Int Word8)
Run Code Online (Sandbox Code Playgroud)

除绩效报告外:

COST CENTRE MODULE SRC                        %time %alloc

arrayToBS   Lib    src/Lib.hs:28:1-37          88.1   99.0
newBuffer   Lib    src/Lib.hs:(23,1)-(25,12)    9.9    0.8
Run Code Online (Sandbox Code Playgroud)

理想情况下arrayToBS比创建数组要快得多.如果我size改为100:

COST CENTRE         MODULE                          SRC …
Run Code Online (Sandbox Code Playgroud)

arrays haskell ghc bytestring websocket

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

标签 统计

arrays ×1

bytestring ×1

ghc ×1

haskell ×1

playframework ×1

scala ×1

websocket ×1