spring boot怎么编写能持续监听的socket通信服务器

代码小白。对socket通信这块不了解,现在手上正好有个急事关于这个。主要内容就是第三方通过socket通信调用我的机器发送xml报文,自己测试的时候写了个main函数serversocket,但是实际上最后要部署到生产,main函数肯定不行,看网上说什么监听器、守护进程之类的根本不懂…还请大神们指导指导,最好简单源码支持下,万分感谢!

socket服务类

package com.socket.server;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class MytSocketServer {

    //服务监听端口号
    private int serverPort = 10002;
    
    //socket服务类
    private ServerSocket socketServer;
    
    //socket服务监听线程
    private ServerThread serverThread;
    
    public void initSocketServer() {
        
    }
    
    public void startServer() {
        try {
            //启动服务
            socketServer = new ServerSocket(serverPort);
        } catch (IOException e) {
            System.out.println("初始化SSLServer失败[IO异常]: " + e.getMessage());
            System.exit(0);
        }
        
        serverThread = new ServerThread();
        Thread workThread = new Thread(serverThread);
        workThread.start();
    }
    
    class ServerThread implements Runnable {

        @Override
        public void run() {
            while (true) {
                Socket socket = null;
                try {
                    //监控端口,没有连接时阻塞,
                    socket = socketServer.accept();
                    
                    //有连接,交给线程BusinessThread处理,让服务可以继续监控端口
                    new Thread(new BusinessThread(socket)).start();
                    
                    
                } catch (IOException e) {
                    System.out.println("处理remote socket失败: " + e.getMessage());
                }
                
                try {
                    //这里可以按需要设置时间间隔,业务多间隔就短点,反之就长点
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                }
            }
        }
    }
}

业务处理线程类

package com.socket.server;

import java.net.Socket;

public class BusinessThread implements Runnable {
    
    private Socket socket;

    public BusinessThread(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        //从socket中读取完整消息
        String xml = readXml();
        
        //一下进行其他处理

    }

    private String readXml() {
        // TODO Auto-generated method stub
        return null;
    }

}

测试类

package com.socket.server;

public class Test {

    public static void main(String[] args) {
        MytSocketServer sever = new MytSocketServer();
        sever.initSocketServer();
    }
}

部署到生产,先安装jdk

  1. 打成jar包 xxxxxx.jar
  2. 上传到生产服务器
  3. 配置相关的配置文件
  4. java -jar xxxxxx.jar 启动程序

第三方条用你的机器发送xml?是访问你的socket server,发xml给你的机器吧

测试代码换个位置就行了,你把代码放到springboot启动时加载的类里面,启动的时候顺便启动你的socket服务就行。如果只是为了用socket你的服务里面没有其它东西的话。直接用你的带main方法的代码打个包放到服务器上启动也是没有问题的。