我有一个hashMap,它需要通过网络从服务器传输到客户端。现在,当大小超过套接字缓冲区提供的某个限制时,将引发以下异常。
由: weblogic.socket.MaxMessageSizeExceededException:大小的传入消息引起的:'3002880‘字节超过协议的配置最大值:'3000000’字节:'t3'
在搜索它时,我发现套接字的大小应该增加,但这并不是必需的,因为这不是一个很好的解决方案。
然后,在使用"DeflaterOutputStream/InflaterInputStream“发送之前,我尝试压缩HashMap。但这里的挑战是," ObjectOutputStream“对象是由weblogic类创建的,而平减器/充气流应该在尝试创建ObjectOutputStream以使压缩工作时嵌入。
有什么办法我能做到吗?
另外,是否可以有某种方法使weblogic使用的t3协议上的压缩能够自动使用压缩。我已经对t3协议是否可行做了一些研究,但似乎t3协议不支持这一点。但我不确定weblogic的新版本是否支持这一点。
我还在考虑将HashMap分解到“套接字缓冲区大小”的块中,但它需要更改现有的设计,到目前为止并不是首选的。
请分享你对此的看法。
发布于 2016-11-29 07:58:55
如果HashMap将来可能包含更多的数据,那么压缩它也只是一个暂时的解决方案。永久解决该问题的方法是,如果映射中有太多的项,则将请求拆分为多个请求。
发布于 2017-01-09 14:35:00
您可以将Map包装到另一个对象中,例如,称为Payload,并使所有通信都成为压缩对象的一部分。
public class Payload<T extends Serializable> {
private T payload;
public Payload( T payload ) {
this.payload = payload;
}
private T get() {
return payload;
}
public static final boolean ENABLE_COMPRESSION = BooleanUtils.toBooleanDefaultIfNull( BooleanUtils.toBooleanObject( System.getProperty( "serialization.gzip.enabled" ) ), true );
private void writeObject( ObjectOutputStream oos ) throws IOException {
if ( ENABLE_COMPRESSION ) {
GZIPOutputStream zos = new GZIPOutputStream( oos, 65536 );
ObjectOutputStream sender = new ObjectOutputStream( zos );
sender.writeObject( payload );
sender.flush();
zos.finish();
} else {
oos.defaultWriteObject();
}
}
@SuppressWarnings( "unchecked" )
private void readObject( ObjectInputStream ois ) throws ClassNotFoundException, IOException {
if ( ENABLE_COMPRESSION ) {
GZIPInputStream zis = new GZIPInputStream( ois, 65536 );
ObjectInputStream receiver = new ObjectInputStream( zis );
payload = (T) receiver.readObject();
} else {
ois.defaultReadObject();
}
}
}然后,当发送任何对象时,它将被包装在一个Payload对象中,并因此被压缩。
public Payload<Map> someRemoteCall() {
Map map = new HashMap();
populate( map ); // do whatever needs to be done to fill up the map.
Payload<Map> payload = new Payload<Map>( map );
return payload;
}显然,它可能涉及对接口的一些更改,这可能是不可取的,但到目前为止,这是我发现的最好的。
希望这能有所帮助。
https://stackoverflow.com/questions/40860275
复制相似问题