启动一个单独的线程监听Socket,在读到数据后触发一个事件或者调用回调函数

解决方案 »

  1.   

    可是我做的是web应用,启动线程可能开销太大
      

  2.   

    虽然是web,但是一个好的线程控制能力所用的网络资源开销换来的相比之下的顺畅的服务端和客户端数据的畅通的代价是值得的!你说呢?
      

  3.   

    "原因可能是 服务器端写完流后并不关闭socket"
    那就处理完后自己把Socket关掉嘛 !
      

  4.   

    web应用不像windows应用,web是无状态的,要做线程处理很麻烦,而且我的web程序放在服务器机群中,对于发送数据的服务器来说web是客户端,对于终端用户来说web是服务端,当用户并发一上来,线程的消耗就相当客观。不开线程就没有办法了吗?
      

  5.   

    -->"原因可能是 服务器端写完流后并不关闭socket"
    那就处理完后自己把Socket关掉嘛 !服务器端的程序不是我写的,比如一个ftp服务器,我要下载一个文件,首先连上后验证用户,验证通过后服务器端等待我发命令,而不能关闭socket,但是客户端又因为被阻塞不能继续发命令,就耗在这了
      

  6.   

    web应用不能用socket这个是肯定的。
    你说的可能是cs的程序,服务器端阻塞是为了监听客户端的请求,有请求了就对客户端返回数据,得以继续工作。要是想关掉socket的话就没法工作了,socket是保持状态的。
      

  7.   

    web程序应该可以用socket的,简单的比如数据库的数据获取,web服务器上的jsp提交sql搜索语句,然后从数据库服务器上得到结果集返回,这种通讯低层肯定是用socket实现的,不然还有什么方式传送数据?
      

  8.   

    你下面这段代码只是和服务器建立了某种连接,你没有发送讯息给服务器,服务器所以也不会给你发送讯息。你可以改改服务器段代码,在接收到连接的时候发送一个消息到连接端。
    Socket client = new Socket(host, port);
    InputStream is = client.getInputStream();
    DataInputStream dis = new DataInputStream(is);
    String line = "";
    while((line = dis.readLine()) != null)
    {
    System.out.println(line);
    }