草庐IT

NONBLOCKING

全部标签

java - 非阻塞 IO 仍然是服务器端 Java 的问题吗?

JavaNIOSocketFramework据称向开发人员隐藏了非阻塞IO的肮脏细节,使他们能够构建高度可扩展的应用程序,仅使用一个线程就可以处理超过10000个传入和传出套接字。对于典型版本的Java2SE/EE,非阻塞IO是否仍然是一个痛苦?这个框架是否仍然必要且有用?感谢您的宝贵时间。 最佳答案 当然,NIO对一些细节进行了抽象。非阻塞IO仍然让您头疼(至少,我发现它是),但至少它是可行的。(我个人更喜欢异步IO的.NET风格,但这是另一回事。)我通常使用阻塞IO:对于大多数任务,这就是我所需要的,并且我不会通过使用非阻塞IO

sockets - 套接字未阻塞写入操作 : OpenSolaris

我有一个单元测试来检查阻塞和非阻塞套接字的行为——服务器写了一个很长的响应,在某些时候它不应该再写了,它写入block。基本上是一边写,另一边不读。在Solaris下,有时我会收到错误“空间不足”(写入75MB后),而不是在写入时阻塞:重现问题的程序:#include#include#include#include#include#include#include#include#include#include#include#include#includecharconst*address="127.0.0.1";#definecheck(x)do{if((x)0){intfd=-1;

java - Java中的非阻塞连接

在Java中实现非阻塞TCP连接的最佳方法是什么?我希望能够将套接字与普通流(有时是SSL)一起使用。我还必须以Android2.1为目标,所以我买不起最新最好的。 最佳答案 您可以使用SocketChannel和configureBlocking(false).如果你有多个非阻塞I/Ochannel并且你打算从一个线程中使用它们,你可能会发现Selector也很有用。请注意,使用阻塞套接字和使用多线程来确保您的应用在阻塞等待I/O完成时可以继续执行有用的工作通常更容易且更不容易出错。

python - Windows 上的 gevent TCP 服务器

到目前为止,我一直在尝试使用gevent创建一个TCP服务器,但没有(任何重大)成功。我认为问题出在Windows中(我之前在Windows下遇到过一些套接字问题)。我在Windows7下使用的是Python2.7,gevent0.13。这是我的代码:fromgeventimportsocketfromgevent.serverimportStreamServerdefhandle_echo(sock,address):try:fp=sock.makefile()whileTrue:#Justechoswhateveritreceivestry:line=fp.readline()ex

tcp - 给定 TCP,当 IO 是非阻塞时,State Design Pattern 是否用处不大?

在我的TCP应用程序中,只要IO处于阻塞状态,状态设计模式似乎就很有用。我的SwingWorker的doInBackground()可以通过引用一个对象循环访问TCP连接中的读取、写入和接受状态。请参阅维基百科讨论页上的示例:http://en.wikipedia.org/wiki/Talk%3AState_pattern.然而,当我将服务器重构为非阻塞IO时,它似乎不再有用了。Select()返回一组准备好进行IO的channel,这些channel通过引用一系列if语句中的SelectionKey状态来处理。任何人都可以根据经验或理解来确认当IO是非阻塞时状态设计模式是否仍然有用?

c++ - 如何使用 streamsocket 作为 poco 库中的非阻塞 tcp 客户端?

poco库为tcp服务器提供了一个reactor框架。并且有一些示例演示了如何使用它。但我找不到任何streamsocket的例子。我只想在非阻塞模式的tcp客户端使用,请问如何使用?谢谢。 最佳答案 对于C++中的网络I/O,建议使用ASIO因为它正在准备包含在C++语言标准中。 关于c++-如何使用streamsocket作为poco库中的非阻塞tcp客户端?,我们在StackOverflow上找到一个类似的问题: https://stackoverflo

tcp - 在 Windows 下的非阻塞 TCP 套接字上使用 SO_SNDBUF 的奇怪行为

我试图降低我的非阻塞TCP套接字上的发送缓冲区大小,以便我可以正确显示上传进度条,但我看到了一些奇怪的行为。我正在创建一个非阻塞的TCP套接字,将SO_SNDBUF设置为1024,验证设置是否正确,然后连接(在调用连接之前和之后都试过了,没有区别)。问题是,当我的应用程序实际出现并调用发送(发送大约2MB)而不是返回发送了大约1024个字节时,发送调用显然接受了所有数据并返回了2MB的发送值(正是我通过了)。一切都正常运行(这是一个HTTPPUT,我得到了一个响应,等等)但是我最终在我的进度条中显示的是上传在100%大约30秒然后响应进来。我已经确认,如果我在收到响应之前停止,则上传不

c - 在 LINUX 上的 C 中打开 O_NONBLOCKING

***背景****我是TCP的新手,所以我的问题可能有点基础。我试图在接收数据的套接字上打开O_NONBLOCK。到目前为止,我已经尝试过不同的方法来设置O_NONBLOCK、itcl()和fcntl()。现在我正试图让fcntl()工作。我的问题:您应该在连接套接字之前还是之后设置O_NONBLOCK?**我当前的fcntl()实现是基于代码之前的链接:Howtoresetasocketbacktoblockingmode(afterIsetittononblockingmode)?//setsockettoNONBlockingon=fcntl(Socket,F_GETFL);on

c++ - BSD 套接字 - 如何使用非阻塞套接字?

我正在尝试使用非阻塞TCP套接字。问题是他们还在阻塞。代码如下-服务器代码-structsockaddrname;charbuf[80];voidset_nonblock(intsocket){intflags;flags=fcntl(socket,F_GETFL,0);assert(flags!=-1);fcntl(socket,F_SETFL,flags|O_NONBLOCK);}intmain(intagrc,char**argv){intsock,new_sd,adrlen;//sockisthissocket,new_sdisconnectionsocketname.sa_f

c# - 非阻塞 Tcp 服务器

这真的不是问题,我只是在寻找一些指导方针:)我目前正在编写一些抽象的tcp服务器,它应该使用尽可能少的线程。目前它是这样工作的。我有一个正在监听的线程和一些工作线程。监听器线程只是等待客户端连接我希望每个服务器实例都有一个监听器线程。工作线程正在客户端套接字上执行所有读/写/处理工作。所以我的问题是构建高效的工作流程。我遇到了一些我还不能真正解决的问题。worker代码是这样的(代码真的很简单,只是为了显示我遇到问题的地方):ListreadSockets=newList();ListwriteSockets=newList();ListerrorSockets=newList();w