Mycat源码阅读(四)套接字读写数据

第三篇中与JDBC握手,new了HandshakePacket对象,调用write方法,将报文发送给jdbc。所谓write方法就是最终调用AbstractConnection的write方法,将需要发送的数据写入writeQueue,再通过NIOSocketWR写出去。

@Override
public final void write(ByteBuffer buffer) {
   	
	if (isSupportCompress()) {
		ByteBuffer newBuffer = CompressUtil.compressMysqlPacket(buffer, this, compressUnfinishedDataQueue);
		writeQueue.offer(newBuffer);
	} else {
		writeQueue.offer(buffer);
	}

	// if ansyn write finishe event got lock before me ,then writing
	// flag is set false but not start a write request
	// so we check again
	try {
		this.socketWR.doNextWriteCheck();
	} catch (Exception e) {
		LOGGER.warn("write err:", e);
		this.close("write err:" + e);
	}
}

而asynRead()方法,依然是调用NIOSocketWR的asynRead方法,读取完毕后,通过AbstractConnection的onReadData方法通知connection,onReadData方法内调用handle方法对数据进行分发处理。

@Override
public void handle(byte[] data) {
	if (isSupportCompress()) {
		List<byte[]> packs = CompressUtil.decompressMysqlPacket(data, decompressUnfinishedDataQueue);
		for (byte[] pack : packs) {
			if (pack.length != 0) {
				handler.handle(pack);
			}
		}
	} else {
		handler.handle(data);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值