SpringBoot集成Socket通訊之Mina框架

環境:JDK1.8   WIN10

集成:SpringBoot+Mybatis+Mina+MySql

開發工具eclipse Neon.3 Release (4.6.3)

 

目錄如下

Mina包中的ServerHandler裏有所有的事件

在spring boot啓動類中添加打開端口的方法

Util工具包中放了幾個常用的進制轉換、CRC校驗、Unicode轉換

ServerHandler中調用其他service需要使用特殊方法,類中已經註明流程

總結來說就三個步驟

1.在pom.xml中添加兩個jar包 Mina和Socket

                <!--socket通訊 -->
                <dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-websocket</artifactId>
			<version>4.0.1.RELEASE</version>
		</dependency>
		
		<!--Mina框架 -->
		<dependency>
		    <groupId>org.apache.mina</groupId>
		    <artifactId>mina-core</artifactId>
		    <version>2.0.2</version>
		</dependency>

2.在SpringBoot啓動類Application中增加啓動方法

    @Bean
    public IoAcceptor ioAcceptor() throws Exception {
    	IoAcceptor acceptor=new NioSocketAcceptor();
        acceptor.setHandler(new ServerHandler());
        acceptor.getSessionConfig().setReadBufferSize(1024);
        acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 100);
        acceptor.bind(new InetSocketAddress(PORT));
        System.out.println("服務器在端口:" + PORT + "已經啓動");
        return acceptor;
    }

3.創建Mina事件類ServerHandler

package cn.yiyuan.Mina;

import javax.annotation.PostConstruct;
import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.transport.socket.SocketSessionConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import cn.yiyuan.Util.HexUtil;

@Component
public class ServerHandler extends IoHandlerAdapter {
	
    private Logger logger = LoggerFactory.getLogger(this.getClass());
	
	
	/* 在本類中調用其他service需要使用以下方法
	 * 
	 * */
	
	//1.聲明service類
	/*@Autowired
	private TbBoxService tbBoxService;*/
	
    private static ServerHandler serverHandler ;
    
    //2通過@PostConstruct實現初始化bean之前進行的操作
    @PostConstruct 
    public void init() { 
        serverHandler = this; 
        //serverHandler.tbBoxService = this.tbBoxService;.
        //3.調用時需要加前綴 如 serverHandler.tbBoxService
    }  
    

	@Override  
	public void sessionCreated(IoSession session) throws Exception { //用戶連接到服務器
		SocketSessionConfig cfg = (SocketSessionConfig) session.getConfig(); 
		cfg.setSoLinger(0);
		logger.info("[服務建立]" + session.getId());
	}
	
    @Override
    public void messageReceived(IoSession session, Object message)throws Exception {//接收消息
    	IoBuffer bbuf = (IoBuffer) message;  
        byte[] byten = new byte[bbuf.limit()];  
        bbuf.get(byten, bbuf.position(), bbuf.limit());  
        String temp=HexUtil.bytes2HexString(byten);
        temp = temp.trim();
        logger.info("[收到消息]" + temp);
	}
    
    
    
    @Override  
	public void sessionClosed(IoSession session) throws Exception {   //用戶從服務器斷開
    	logger.info("[服務斷開]" + session.getId());
    	
	}
    @Override
    public void messageSent(IoSession session, Object message){ //發送消息結束
    	//logger.info("[發送消息結束]" + session.getId() + "message" + message);
    }
    
    
    @Override
    public void sessionIdle(IoSession session, IdleStatus status)throws Exception {//重連
    	logger.info("[服務重連]" + session.getId() + "status" + status.toString());
    }
	
	
	@Override
    public void exceptionCaught(IoSession session, Throwable cause)throws Exception {//連接發生異常
		cause.printStackTrace();
        logger.info("[服務異常]" + session.getId());
    }

}

然後直接啓動項目,客戶端通過IP:端口即可連接服務端

 

以上項目均爲本人爲寫項目整合的網上已有資源,希望可以幫助到大家,同時感謝開源作者

 

完整項目下載地址:https://download.csdn.net/download/qq_33768099/10992288

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章