吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 857|回复: 1
收起左侧

[求助] spring boot使用socket会被阻塞请求?

[复制链接]
ppgjx 发表于 2023-1-31 23:49
[Asm] 纯文本查看 复制代码
package com.api.task;

import com.api.dao.ApiUserDao;
import com.api.dao.IpInfoDao;
import com.api.dao.UserIpInfoDao;
import com.api.entity.*;
import com.api.service.ApiUserService;
import com.api.socket.server.RemoteServer;
import com.api.task.info.ProxyUserInfo;
import com.github.monkeywie.proxyee.server.HttpProxyServer;
import com.github.monkeywie.proxyee.server.HttpProxyServerConfig;
import com.github.monkeywie.proxyee.server.accept.HttpProxyAcceptHandler;
import com.github.monkeywie.proxyee.server.auth.model.BasicHttpToken;
import io.netty.channel.Channel;
import io.netty.handler.codec.http.HttpRequest;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

import javax.annotation.PreDestroy;
import javax.annotation.Resource;
import java.net.*;
import java.util.*;


 * @Date: 2021/10/14/15:59
 * @Description: 每日日报定时推送
 */


@Component
public class TestTask implements ApplicationRunner {

    @Value("${proxy_port}")
    private int port;

    @Override
    public void run(ApplicationArguments args)  {

        new Thread(new Runnable() {
            @Override
            public void run() {
                RemoteServer remoteServer = new RemoteServer(port);
                remoteServer.listen();
                System.out.println("哈哈");
            }
        }).start();

    }



    @PreDestroy
    public void backData(){
        System.out.println("结束端口");
    }



}


比如我在spring boot启动后新建了一个线程 去监听一个socket 服务器
[Asm] 纯文本查看 复制代码
public class RemoteServer {

    private final static Logger logger = LoggerFactory.getLogger(RemoteServer.class);


    private final int port;

    public RemoteServer(int port) {
        this.port = port;
    }

    public void listen() {
        try {
            logger.info("remote server start listening...");
            ServerSocket serverSocket = new ServerSocket(port);
            while (true) {
                Socket socket = serverSocket.accept();
                new RemoteServerThread(socket).start();
            }
        } catch (Exception e) {
            logger.error("", e);
        }
    }

}


监听以后RemoteServerThread里面的run方法就是不断地读取InputStream流,然后我发现如果给InputStream里面的打个断点,我springboot所有的接口都被阻塞了,这是啥原因了,而定时任务@Scheduled(cron = "0/60 * * * * *") debug就不会阻塞

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

mirakyux 发表于 2023-2-1 09:24
Suspend 由 All 改为 Thread
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 01:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表