t-io-websocket 即时通讯配置

t-io-websocket 下载地址:https://gitee.com/tywo45/tio-websocket-showcase

pom.xml

		<!--tio-websocket -->
        <dependency>
            <groupId>org.t-io</groupId>
            <artifactId>tio-websocket-server</artifactId>
            <version>3.1.3.v20180720-RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>

项目结构

t-io-websocket开发项目介绍-LMLPHP

socketPackage 是消息体对象

public class SocketPackage {
		//文本内容
		private String txt;
		//消息类型
		private String messageType;
		//当前的人的名称
		private String name;
		//当前的房间主键
		private String roomName;
		//当前的消息主键
		private String messageId;
		//用户头像
		private String icon;
		//发送容器号
		private String containerId;
		//用户主键
		private String userId;
		//消息类型
		private String type;
		//当前操作对象
		private ChannelContext channelContext;
		//消息体对象
		private String jsonMessage;
		//消息体对象Object
		private JSONObject jsonObject;
	}

MessageHandler消息处理对象

t-io-websocket开发项目介绍-LMLPHP

  1. 消息类型方法处理public
    文件类型方法
    text:文字信息处理
    event:自定义信息处理
    updateRoomName:修改房间信息
    addContainer:添加至容器信息处理
    createContainer:创建容器信息处理
    autoReturn:自动回复
    removeContainer:容器内退出消息处理
    updateUserInfo:修改用户信息
  2. 内部调用方法private
    targetMessageText:带有业务主键信息处理
    defaultHandler:基础信息处理(发送普通信息)
    addMessageCenter:添加会话记录

第一步握手后处理

	//如果有容器,则另外分组容器
	handler.addContainer(containerId, channelContext, "big");//big代表自身信息不需要添加容器主键
	//绑定到群组
	Tio.bindGroup(channelContext, roomName);
	//绑定到个人
	Tio.bindBsId(channelContext, userId);
	//发送提示信息-in为房间进入信息提示-containerIn为容器进入信息提示
	handler.sendNoticeMessage(channelContext, roomName, name, containerId == null ? "in" : "containerIn", null);

消息类型的反射处理

			Class<?> handlerClass = MessageHandler.class;
			try {
				//默认的是文字类型属性
				Method method = handlerClass.getMethod(messageType == null ? "text" : messageType, SocketPackage.class);
				method.invoke(handler, new SocketPackage(checkParam(txt), messageType, name, roomName,
						messageId, icon, containerId, userId, type,
						channelContext, msg.toJSONString(), msg));
			} catch (NoSuchMethodException e) {
				throw new BusinessException("消息类型错误");
			}
02-22 05:46