司马晨风 2009-12-19 13:19
浏览 620
已采纳

在tomcat启动时候启动一个socket长连接的问题

因为业务需要,需要在tomcat启动时就启动一个长连接socket,用来接收后台的数据。

当然,也许你和我一样,一开始就想到在servlet的init方法中启动这个socket,然后把它调成启动顺序1.或者写个listener。

 

但是,这个socket是个长连接。

init(){

    启动socket

}

这个socket启动之后,关闭方法应该是写在destory方法中,那么init方法永远无法退出了。

 

我又想,把这个socket服务,写在一个线程里,在init方法启动这个线程,启动完事了,就return

init(){

     socketThread.run();

     return;

}

 

但是,这个线程不run完,init方法是不会结束的。

 

请教高手,这个问题怎么解决;

 

我的需求是:tomcat启动时,启动一个长连接socket

  • 写回答

1条回答 默认 最新

  • lzj0470 2009-12-19 14:10
    关注

    [code="java"]
    servlet类
    Socket socket = null;
    public void init() throws ServletException {
    // Put your code here
    socketThread sthread = new socketThread();
    sthread.start();
    socket = sthread.getSocket();
    }
    socketThread类
    public socketThread extends Thread{
    private static Socket s = null;
    public void run()
    {
    try
    {
    ServerSocket listener = new ServerSocket(port);
    while(true){
    //相关业务
    s = listener.accept();
    }
    }catch(Exception ex){

        }
    }
    public Socket getSocket(){
         return s;
    }
    

    }
    [/code]
    不知道这样是否满足你的需求啦

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名