延迟处理客户端数据:将java套接字ID视为文件ID

时间:2013-07-03 07:20:53

标签: java perl client-server

我有一个工作正常的java客户端 - 服务器应用程序。现在我想做一些改变,我不确定它是否可能。我希望在接受服务器中断时延迟处理客户端数据。我希望在接受中断之后将所有处理逻辑包装到我希望处理数据时调用的函数中,而不是在接受中断后立即调用。 Perl允许使用sysread函数,它将套接字id视为File处理程序并进行处理。在Java中有可能吗?

存在什么:

void server_side()
{ 

     // usual server code

     accept() // blocking code waiting for client data 

     ...accept breaks so process data now ..
}

我想要的是什么:

void server_side(){

     // usual servercode

     accept() // blocking for client data

     .. I dont want to process just yet .. Wait !
}

void main() 
{
  .. Usual code ..

   **Ok lets process client data here .**

}

在某种程度上Perl是美丽的并允许这样的事情发生。在perl中,您可以像这样使用sysread命令

    Create socket

       void create()
    {

        .. Usual socket code ..
         $sock = $mainsock->accept();
         ... DONT process here . Will process later in function processing 

    }

void processing()

{

    .. Use sysread to treat socket handler as file . 

    .. Lets read now.

    my $bytes_to_read = 1024;
    my $bytes_read = sysread($sock, $buffer, $bytes_to_read);

    ...

}

我可以用Java做到这一点吗?

1 个答案:

答案 0 :(得分:1)

接受套接字后,没有任何东西强迫你对套接字做任何事情。显然,您必须坚持使用套接字对象来知道数据的位置(或发送数据),但是您可以等待应用程序处理数据的时间,无论语言如何。< / p>

http://docs.oracle.com/javase/7/docs/api/java/net/Socket.html