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



我有一个运行良好的java客户端-服务器应用程序。现在我想做一些我不确定是否可能的改变。我想在服务器的接受中断时延迟处理客户端数据。我想把accept中断后的所有处理逻辑包装成一个函数,每当我想处理数据时,我都会调用这个函数,而不是在accept中断之后立即调用。Perl使用sysread函数允许这样做,该函数将套接字id视为文件处理程序并进行处理。这在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做这件事吗?

在接受套接字后,没有什么能强迫你对它做任何事情。很明显,你必须抓住套接字对象,才能知道数据的去向(或发送数据),但你可以等待应用程序处理数据,无论语言如何。

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

最新更新