gpt4 book ai didi

java - 延迟处理客户端数据: Treat java socket id as a file id

转载 作者:行者123 更新时间:2023-12-01 14:22:15 26 4
gpt4 key购买 nike

我有一个运行良好的 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

关于java - 延迟处理客户端数据: Treat java socket id as a file id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17441975/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com