问题标签 [nonblocking]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
2704 浏览

c++ - 如何在 C++ 中使用 Berkeley 套接字避免 DOS 攻击

我正在阅读Richard Stevens 的UNIX Network Programming Volume 1 并尝试编写一个使用 Telnet 协议的 TCP Echo Client。我仍处于早期阶段并尝试编写读写函数。

我想写它来使用 I/O 多路复用和 Select 函数,因为它需要是多客户端的,我不想在尝试学习 Berkeley Sockets 库时尝试学习 C++ 线程同时。在 I/O 多路复用一章的末尾,Stevens 有一小节介绍 DOS 攻击,他说我计划使用的方法容易受到 DOS 攻击,这种攻击在连接后只发送一个字节然后挂起。之后他提到了 3 种可能的解决方案——非阻塞 IO、线程(出)和对 I/O 操作设置超时。

我的问题是,还有其他方法可以避免这种攻击吗?如果不是,其中哪一个是最好的?我浏览了关于设置操作超时的部分,但它看起来不像我想做的事情。他建议的方法看起来很复杂,我不知道如何将它们变成我已经拥有的。我只看了关于 NIO 的章节,看起来这是现在要走的路,但我想看看是否有其他方法可以解决这个问题,然后再花几个小时浏览这一章。

有任何想法吗?

0 投票
2 回答
5727 浏览

linux - 用于套接字流的 Linux TCP/IP 非阻塞发送.. TCP recv 缓冲区会发生什么?

这与 Linux 内核 2.6 TCP 套接字有关。

我正在发送大量数据,例如 300 MB,并以非阻塞方式发送给另一个一次接收 8 MB 的客户端。

在一次 8 MB 接收后,“接收者”停止接收,因为它想要执行其他任务,例如错误处理。发送方会得到一个 EWOULDBLOCK,但由于它是异步通信,发送方会尝试填满另一端的 TCP recv 缓冲区。

我的问题是:即使“发送方”收到 EWOULDBLOCK 并且“接收方”停止接收,TCP recv 缓冲区中还会有数据吗?相同的套接字用于错误处理,那么“接收者”是否必须在尝试重用现有套接字之前清除 TCP recv 缓冲区?

0 投票
2 回答
2471 浏览

c# - 对线程安全的非阻塞缓冲区管理器的建议

我创建了一个简单的缓冲区管理器类,用于异步套接字。这将防止内存碎片并提高性能。对进一步改进或其他方法有什么建议吗?

0 投票
2 回答
582 浏览

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

Java NIO Socket Framework据称向开发人员隐藏了非阻塞 IO 的肮脏细节,允许他们构建高度可扩展的应用程序,这些应用程序可以仅使用一个线程处理超过 10000 个传入和传出套接字。

  • 使用 Java 2 SE/EE 的典型版本,非阻塞 IO 仍然很痛苦吗?

  • 这个框架还有必要和有用吗?

谢谢你的时间。

0 投票
3 回答
4124 浏览

python - 在python中解析(流式传输)XML的非阻塞方法

我有一个通过套接字传入的 XML 文档,我需要对其进行解析和即时响应(即解析部分树)。我想要的是一种非阻塞方法,这样我就可以在等待更多数据进入的同时做其他事情(没有线程)。

如果它在读取缓冲区为空时完成迭代,那么像 iterparse 这样的东西将是理想的,例如:

我想 SAX 也是一种选择,但 iterparse 对我的需要来说似乎更简单。有任何想法吗?

更新:

使用线程很好,但引入了我希望回避的复杂程度。我认为非阻塞调用将是一个很好的方法,但我发现它增加了解析 XML 的复杂性。

0 投票
4 回答
18074 浏览

java - Java序列化,ObjectInputStream.readObject(),检查是否会阻塞

我正在使用一个ObjectInputStream来调用readObject序列化的读取Objects。我想避免使用此方法块,因此我希望使用类似Inputstream.available().

InputStream.available()会告诉你有可用的字节并且read()不会阻塞。是否有等效的序列化方法可以告诉您是否有Object可用的 s 并且readObject不会阻塞?

0 投票
4 回答
2616 浏览

python - Python中的非阻塞服务器

有人可以告诉如何单独使用套接字库编写非阻塞服务器代码。谢谢

0 投票
2 回答
2585 浏览

sockets - 使用多个套接字,选择非阻塞还是阻塞更好?

假设我有一个服务器程序可以接受来自 10 个(或更多)不同客户端的连接。客户端随机发送数据,服务器接收到这些数据,但可以肯定的是,每次更新都会至少有一个客户端发送数据。服务器不能等待信息到达,因为它还有其他处理要做。除了使用异步套接字之外,我还看到了两个选项:

  1. 使所有套接字不阻塞。在一个循环中,调用recv()每个套接字并允许它失败,WSAEWOULDBLOCK如果没有可用的数据并且如果我碰巧得到了一些数据,那么保留它。

  2. 让套接字保持阻塞状态。将所有套接字添加到 aFD_SET并调用select(). 如果返回值不为零(大多数情况下是这样),则循环遍历所有套接字以找到适当数量的可读套接字,FD_ISSET()并仅调用recv()可读套接字。

第一个选项将创建更多对该recv()函数的调用。第二种方法从编程的角度来看是一个更大的痛苦,因为所有的FD_SETFD_ISSET循环。

首选哪种方法(或另一种方法)?是否避免让recv()非阻塞套接字失败的开销值得调用的麻烦select()

我想我理解这两种方法,并且我都成功地尝试过,但我不知道一种方法是否被认为更好或最优。

0 投票
1 回答
1729 浏览

pipe - O_NONBLOCK 管道的问题

我正在尝试使用管道发送和接收:

发送.cpp

接收文件

./发送 ./recv

open 是正确的,但是当 send.cpp 执行“write”时程序终止并且不显示“4”!!!!我recv端的Ta和Tb都不对!

我的程序有什么问题?!(我不得不说当我删除 O_NONBLOCK falg 时程序运行正常)

谢谢

0 投票
6 回答
12300 浏览

php - 发送非阻塞 HTTP POST 请求

我在 php 和 python 中有两个网站。当用户向服务器发送请求时,我需要 php/python 向远程服务器发送 HTTP POST 请求。我想立即回复用户,而无需等待远程服务器的响应。

向用户发送响应后是否可以继续运行 php/python 脚本。在这种情况下,我将首先回复用户,然后才将 HTTP POST 请求发送到远程服务器。

是否可以在不处理响应的情况下在 php/python 中创建非阻塞 HTTP 客户端?

在 php 和 python 中具有相同逻辑的解决方案对我来说更可取。

谢谢