Netty 3.8.0上负载测试期间的数据损坏
有没有人有过类似的经历? 简而言之,我已经创建了一个TCPServer、TCPClient、编码器和解码器 在我的编码器和解码器上,我使用一个签名字节来检测任何数据损坏。 如果我运行一个TCPClient线程。它总是有效的。但当它增加到4个线程时,我开始有随机错误 TestClient的示例代码 公共类测试客户端{ 私有静态日志记录器=LogFactory.getLog(TestClient.class)Netty 3.8.0上负载测试期间的数据损坏,netty,Netty,有没有人有过类似的经历? 简而言之,我已经创建了一个TCPServer、TCPClient、编码器和解码器 在我的编码器和解码器上,我使用一个签名字节来检测任何数据损坏。 如果我运行一个TCPClient线程。它总是有效的。但当它增加到4个线程时,我开始有随机错误 TestClient的示例代码 公共类测试客户端{ 私有静态日志记录器=LogFactory.getLog(TestClient.class) publicstatictcpclient createTCPClient(整数倍,字符串
publicstatictcpclient createTCPClient(整数倍,字符串主机,整数端口){
TCPClient client=TCPClient.start(主机、端口);
if(client.getFuture().waitingunterruptibly(5000))logger.info(“wait ok”);
if(client.getFuture().getChannel().isConnected())logger.info(“已连接”);
返回客户;
}
公共静态字符串createString(整数大小){
StringBuilder sb=新的StringBuilder();
对于(int i=0;i
}我的最佳选择是,您的通道下游Handler或通道上游Handler实现中存在竞争条件
public static TCPClient createTCPClient(int times, String host, int port) {
TCPClient client = TCPClient.start(host, port);
if (client.getFuture().awaitUninterruptibly(5000)) logger.info("wait ok");
if ( client.getFuture().getChannel().isConnected() ) logger.info("connected");
return client;
}
public static String createString(int size) {
StringBuilder sb = new StringBuilder();
for ( int i = 0 ; i < size ; i ++)
sb.append("String createString, client send "+i);
return sb.toString();
}
static class ClientThread implements Runnable {
TCPClient client;
int times;
ClientThread(TCPClient client, int times) {
this.client = client;
this.times = times;
}
@Override
public void run() {
int error = 0;
for ( int i = 0; i < times ; i ++) {
logger.info("send "+i);
try {
Request request = new Request(new Header("test",i, (byte) 0), createString(i).getBytes());
Response response = client.sendRequest( request);
if ( response.isError() ) error ++;
logger.info(response.toString());
} catch (Throwable th) {
error++;
logger.error( th.getMessage());
}
}
logger.info("ERROR # "+ error);
}
}
public static void main(String[] args) throws Exception {
String[] opts = new String[] {"-thread","-times","-host","-port"};
String[] defaults = new String[] {"2", "10", "localhost", "7120" };
String[] paras = getOpts( args, opts, defaults);
int threads = Integer.valueOf(paras[0]);
int times = Integer.valueOf( paras[1]);
String host = paras[2];
int port = Integer.valueOf( paras[3]);
for ( int i=0; i < threads; i++ ) {
logger.info("start thread # "+i);
TCPClient client = createTCPClient(times, host, port);
new Thread( new ClientThread(client, times)).start();
}
}