问题标签 [iocp]

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 投票
1 回答
1256 浏览

c++ - Visual C++ 程序崩溃,但没有生成转储文件。为什么?

我有一个非常奇怪的情况。我正在运行由 Visual Studio 2010 用 C++ 编写的 IOCP 服务器程序。

它使用'minidump',所以当出现诸如指针滥用之类的逻辑错误时,程序会因转储文件而崩溃,因此我可以找出代码中的崩溃点在哪里。

有时(很少),程序崩溃并且没有转储文件。

什么情况下SetUnhandledExceptionFilter()不工作?有人知道这个问题吗?我想不通。

0 投票
1 回答
675 浏览

java - 在 Java (Android) 中连接到 IOCP 服务器

我想用安卓做一个在线游戏。

我打算通过 C++ 制作带有 IOCP 模型的服务器。这应该可以正常工作,问题出在客户端。
C++ 中的 IOCP 客户端示例使用WSASyncselectWSAEventSelect.

我找不到任何与异步套接字一样工作的 Java 示例。

问题:

  1. WSASyncselect()Java中有类似的东西吗?
  2. 如果不是这样,我该怎么做?
0 投票
2 回答
1344 浏览

c++ - 如何同时等待 I/O 完成端口和事件?

有没有可能的方法来实现这一目标?

例如,我有一个 I/O 完成端口,有 10 个工作线程从中拉出任务。每个任务都与一个对象相关联。有些对象不能同时处理,所以如果一个线程正在处理其中一个对象,而第二个线程拉出需要这个对象的任务,则第二个线程必须等待第一个线程完成。

作为一种变通方法,对象可能有一个在释放时发出信号的事件。如果一个线程因为接收到的任务需要一个锁定的对象而被“卡住”,它可以等待锁定的对象被释放,或者等待新任务排队。如果它选择了一个新任务,它将把它无法处理的任务推回队列中。

我知道替代方法,但这似乎是应该存在的功能。这可以通过 Windows API 实现吗?

0 投票
1 回答
165 浏览

c# - 将多个文件关联到同一个 io 完成端口,同时保持文件流顺序 c#

我需要将从另一个进程发送给我的对象写入磁盘上的多个文件。每个对象都带有 fileID(要写入的文件的名称)和数据块。

我想使用 IO 完成端口 (IOCP) 来优化文件写入,使用并发异步 I/O,但我必须同步写入每个文件,例如我必须在写入时保持每个文件的块顺序磁盘但不是文件顺序。

我了解 .Net 在执行 IO 操作时使用 IOCP,但我如何让它按我想要的方式工作?

0 投票
2 回答
2433 浏览

windows - 如何使用 Windows IOCP 检测断开连接 (RST/FIN)?

如何使用 Windows IOCP API 确定 TCP 连接是否被对等方(通过发送 RST 数据包或类似方法)断开?具体来说,我无法发送或接收任何数据——没有重叠的操作正在进行。我只想得到一个异步通知。有没有办法做到这一点?

0 投票
1 回答
106 浏览

c++ - 快速获取客户数据

有没有更好的方法(使用 Windows)可以在不使用 select 的情况下快速从许多客户端获取适量的数据(但如果需要,我愿意使用 select)。IOCP 对我没有好处,而 ippoll 则适用于 Linux。这必须与 OpenSSL 兼容,因为我正在运行 TLS。出于某种原因,BIO 对象在我的机器(Windows 7)上不起作用,它们只是不起作用。因此,我将加密捎带到了 Winsock 连接(有效)。感谢您的回复。

0 投票
2 回答
1344 浏览

c++ - 使用基于 IOCP 的客户端的每个 IO 数据

我正在尝试创建一个 IOCP TCP 客户端,我的代码如下所示:

TCPClient.h:

TCPClient.cpp:

主.cpp:

我对“m_pPerIoData”的使用显然是错误的,因为我每次执行 SendCommand() 时都在更新,并且没有正确删除它。

  • Q1。我应该在哪里做 m_pPerIoData = new PER_IO_DATA?
  • Q2。将指向 PER_IO_DATA 的指针作为成员变量有意义吗?

编辑2:

我已经对上面的现有代码进行了一些重命名(客户端-> 连接),因为这让我感到困惑。

一些背景:

  • 我正在创建一个 DLL,用于控制通过 LAN(或串行端口)连接的 ECR(电子收银机)设备。
  • DLL 提供了易于使用的接口,例如 Connect()、Disconnect() 以及一些 ECR 特定命令,包括 Logon()、Logoff()、ReadCard() 等。
  • (可能对我的应用程序来说太过分了,但是......)我想在我的 DLL 中使用 IOCP 以异步方式向 ECR 发送/接收数据。

我的顶级课程看起来像这样:

而且我有 TcpConnection 类,它是由 ECR 类创建的,并且完成了所有艰苦的工作。Ecr 和 Connection 类都是不可复制的。

连接.h:

TcpConnection.h:

TcpConnection.cpp:

然后,主机应用程序为每个 ECR 设备创建一个 DLL 实例:

我想要 TcpConnection 级别的所有 IOCP 相关内容,而不是 Ecr 级别,因为我不希望 Ecr 关心数据传输是如何在下面完成的。

我的想法行不通吗?

0 投票
7 回答
8836 浏览

c++ - 将 IOCP 与 UDP 一起使用?

我非常熟悉TCP的输入/输出完成端口的用途。

但是,例如,如果我正在编写 FPS 游戏,或者任何需要低延迟的东西可能会破坏交易 - 我希望立即响应玩家以提供最佳的游戏体验,即使以丢失一些空间数据为代价去。很明显,我应该使用UDP,除了经常发送坐标更新之外,我还应该实现一种半可靠的协议(afaik TCP 在 UDP 中会导致丢包,所以我们应该避免将这两者混为一谈)来处理诸如聊天消息之类的事件,或丢包可能至关重要的枪声。

假设我的目标是适用于 MMOFPS 游戏的性能,该游戏允许在一个持久的世界中遇到数百名玩家,除了与枪支战斗之外,它还允许他们通过聊天消息等进行交流 - 这样的事情确实存在并且运行良好 - 查看 PlanetSide 2。

网上的许多文章(例如来自 msdn 的这些文章)都说重叠套接字是最好的,而 IOCP 是神级概念,但它们似乎没有区分我们使用 TCP 以外的其他协议的情况。

所以几乎没有关于开发这种服务器时使用的 I/O 技术的可靠信息,我看过这个,但这个话题似乎很有争议,我也看过这个,但考虑到第一个链接中的讨论,我不知道我是否应该遵循第二个假设,我是否应该将 IOCP 与 UDP 一起使用,如果不是,那么对于 UDP,什么是最可扩展和最有效的 I/O 概念

或者,也许我只是在进行另一个过早的优化,目前不需要提前考虑?

考虑将其发布在 gamedev.stackexchange.com 上,但我认为这个问题更适用于通用网络。

0 投票
1 回答
664 浏览

c++ - 如何为 IOCP 构建工作线程逻辑

我正在创建一个客户端程序,该程序与通过 LAN 连接到我的 PC 的设备进行通信。

我的程序和设备之间的典型通信如下:

第一个字节序列的最后一个十六进制数字表示后面的数据大小(D = 13 字节)。

我的发送例程如下所示:

我的工作线程例程看起来像:

请在上面的代码中查看我的问题。

非常感谢

0 投票
1 回答
2705 浏览

c++ - 新套接字上的 C++ CreateIoCompletionPort

编辑:我猜问题是我必须将容器中的 OVERLAPPED 或 WSAOVERLAPPED 与我的完成端口相关联。那是对的吗?

当有人连接到我的服务器时,我可以获得 IO 完成。然后我在新套接字上使用 CreateIoCompletionPort,并使用原来的完成端口。但是当他们向我发送数据时,它并没有被触发。虽然,如果其他人连接,它仍然会被触发。我的问题是,为什么会发生这种情况?我还确保 CreateIoCompletionPort 返回与原始句柄相同的句柄。是什么赋予了?

编辑: