Akka相当于Java的ObjectInputStream

时间:2015-02-13 19:25:35

标签: java tcp deserialization akka

所以我有一个应用程序,我试图从外部应用程序接收一个对象(让它称之为Envelope),通过{{在常规旧TCP套接字上进行序列化1}},在Akka中实现的服务器上。我设置的服务器角色与Akka TCP tutorial非常相似;下面是我的TCP消息处理程序的相关实现:

ObjectOuputStream

一切都在建立连接方面有效,但是一旦我尝试反序列化数据,我立即得到public class TcpEnvelopeHandler extends UntypedActor { // implementaiton details @Override public void onReceive( Object message) throws Exception { if (message instanceof Received) { deserializeEnvelope( (Received) message); } // More cases not relevent } public void deserializeEnvelope( Received message) throws Exception { final ObjectInputStream dataStream = new ObjectInputStream( message.data().iterator().asInputStream() ); final Envelope envelope = (Envelope) dataStream.readUnshared(); // Do some stuff with envelope } } (来自java.io.EOFException)或readUnshared(来自{{ 1}})。

基于检查原始java.io.StreamCorruptedException数据以及对于从客户端发送的每个对象的事实,处理程序正在接收3条ObjectInputStream条消息,非常清楚Akka只是向我发送原始数据包而不是正确地构建它们以进行反序列化。这是有道理的,因为它是Received在标准Java客户端/服务器模型中的工作并且它阻塞,而Akka在阻塞方面并不重要。

我的问题是,当作为Tcp管理器的处理程序重新设置时,是否有任何标准的Akka功能/角色模仿Received的功能?或者我真的必须手动实现自己合并的数据包吗?如果是这样,我将如何做到这一点?

感谢您的帮助!

0 个答案:

没有答案