在akka-http中,HttpRequest
和HttpResponse
主要是不可变对象,但HttpEntity
主体(Source
除外)。
向另一个演员(特别是远程演员)发送请求,响应或独奏实体是否安全,还是需要一些预防措施?
答案 0 :(得分:0)
如评论中所述:由于套接字限制,将HttpEntity
发送到远程Actor
不太可能。进一步的证据可以在the documentation(强调他们的)中找到:
重要:消息可以是任何类型的对象,但必须是 不可改变的。 Scala不能强制实现不变性,所以必须这样做 约定。
但是,来自ByteString
的{{1}}值与Source本身没有相同的限制,因为ByteString是不可变的。你可以简单地在本地Source
ActorSystem上排空Source并将akka-http
值发送给你的远程Actor。
作为一个例子,假设您想使用Actor来大写基于utf-8的HttpEntity中的所有字符。你可以设置你的演员:
ByteString
然后你的akka-http看起来像:
class UpperActor extends Actor {
override def receive : Receive = {
case b : ByteString => sender() ! b.toString.toUpperCase
}
}