1、t-io是神马?
t-io是一个网络框架,从这一点来说是有点像 netty 的,但 t-io 为常见和网络相关的业务(如 IM、消息推送、RPC、监控)提供了近乎于现成的解决方案,即丰富的编程 API,极大减少业务层的编程难度。
2、怎么用?分为服务端和客户端,先看服务端!
① maven引入依赖
<dependency>
<groupId>org.t-io</groupId>
<artifactId>tio-core</artifactId>
<version>3.0.2.v20180612-RELEASE</version>
</dependency>
② TioServer
不知道要用什么,就先造一个TioServer,它就会告诉接下来该干什么。
TioServer tioServer = new TioServer(serverGroupContext);
需要一个ServerGroupContext。还是老样子,造一个ServerGroupContext,就知道接下来的步骤。
ServerGroupContext serverGroupContext = new ServerGroupContext("tio-server", new ServerAioHandler(), new ServerAioListener());
需要一个字符串String,表示的是服务端的名称。之后是ServerAioHandler和ServerAioListener,这两个是接口,需要自己实现。
先是ServerAioHandler的实现类,看其中的方法就知道是用来编码和解码,还有就是处理业务逻辑(handler方法)
package com.xxjsll.server.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tio.core.ChannelContext;
import org.tio.core.GroupContext;
import org.tio.core.Node;
import org.tio.core.Tio;
import org.tio.core.exception.AioDecodeException;
import org.tio.core.intf.Packet;
import org.tio.server.intf.ServerAioHandler;
import java.nio.ByteBuffer;
/**
* @author tsinghua
* @date 2018/6/20
*/
public class MServerAioHandler implements ServerAioHandler {
private static final Logger logger = LoggerFactory.getLogger(MServerAioHandler.class);
public Packet decode(ByteBuffer byteBuffer, int limit, int position, int readableLength, ChannelContext channelContext) throws AioDecodeException {
logger.debug("inside decode...");
if (readableLength < ServerPacket.PACKET_HEADER_LENGTH) {
return null;
}
int bodyLength = byteBuffer.getInt();
if (bodyLength < 0) {
throw new AioDecodeException("body length[" + bodyLength + "] is invalid.