问题标签 [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 回答
557 浏览

winapi - 传输文件 + SChannel

我正在使用带有 I/O 完成端口的 TransmitFile API 在 Windows 上实现高效的多线程文件服务器。

这一切都很好,但我现在也使用SChannel实现了安全套接字。因为 TransmitFile 将文件直接流式传输到套接字,所以我看不到调用 EncryptMessage 的方法 - 我需要分块读取文件,手动加密和传输它们吗?

当 TransmitFile 仅出于高性能文件传输的目的而提供时,这似乎有点愚蠢,并且安全套接字非常普遍。我想知道 IIS 做了什么,考虑到我相信 TransmitFile 首先是为 IIS 实现的?

(我最初制作了“TransmitFile”和“EncryptMessage”超链接,但垃圾邮件保护只允许一个 - 抱歉)

0 投票
2 回答
155 浏览

c++ - 我对基于套接字的模型的图形表示和解释

http://img600.imageshack.us/img600/3567/graphicrepresentation.png

我的推理方式正确吗?如果是这样,谁能告诉我,就像上面的方案一样,I/O 完成端口将如何工作?在我开始学习如何为 MMORPG 制作高性能服务器之前,我想确定这一切是如何工作的。

0 投票
1 回答
857 浏览

c# - 测试 I/O 完成端口支持

我在 SMTP 邮件服务器 ( LumiSoft Mail Server )的代码中找到了以下代码。根据方法名,测试平台是否支持I/O Completion Ports

它似乎工作正常,但在 Mono/Linux 上失败了。该方法SendToAsync,正如它的名字所说,异步执行。它甚至在另一个线程中执行。但是,当它开始执行时,该方法的 finally 部分已经关闭了套接字并ObjectDisposedException在另一个线程中导致了一个。

那么,测试 IOCP 支持的技术是否不正确?为什么它可以在 Windows 上运行?测试 IOCP 支持的正确方法是什么?

0 投票
3 回答
1435 浏览

c++ - 如何使用 IOCP 将用户定义的数据传递给工作线程?

嘿...我使用 I/O 完成端口和 winsock 创建了一个小型测试服务器。我可以成功连接套接字句柄并将其与完成端口相关联。但我不知道如何将用户定义的数据结构传递到工作线程......

到目前为止,我尝试的是(ULONG_PTR)&structure as在关联调用中将用户结构作为完成键传递,CreateIoCompletionPort() 但这不起作用。

现在我尝试定义自己的 OVERLAPPED 结构并使用 CONTAINING_RECORD(),如此处所述http://msdn.microsoft.com/en-us/magazine/cc302334.aspxhttp://msdn.microsoft.com/en-us /杂志/bb985148.aspx。但这也行不通。(我得到 pHelper 内容的怪异值)

所以我的问题是:如何使用 WSARecv()、GetQueuedCompletionStatus() 和 Completion 数据包或 OVERLAPPED 结构将数据传递给工作线程?

编辑:我怎样才能成功传输“每个连接数据”?...似乎我做错了艺术(如上面两个链接中所述)。

这是我的代码:(是的,它很丑,也是唯一的测试代码)

0 投票
1 回答
511 浏览

c++ - 带有任务调度程序的 IOCP(线程构建块)

我正在使用 TBB,并且想知道如何将 IOCP 与它的任务调度程序一起使用。有人做过吗?如果是这样,一些细节将不胜感激。

我对 IOCP 没有太多经验,但我想用它来向我的所有线程发送消息,并且在任务调度程序之外,你可以给它线程的句柄。但是在 TBB 中,我并不完全确定如何可靠地获取线程句柄。

谢谢!

0 投票
3 回答
1996 浏览

c - 为事件驱动的应用程序选择 IPC 解决方案

我目前正在研究一个相当大的单线程、基于事件的应用程序,该应用程序围绕 Linux 下的 epoll 和其他平台下的类似技术设计。目前,每当我们希望两个实例进行通信时,它们通常通过套接字进行,无论它们是否在同一台机器上运行。出于性能原因,我设想使用某种形式的 IPC 来加速同一台机器的通信。现在,我需要决定使用哪种 IPC 机制。

以下因素对我很重要:

  • 事件驱动,没有完全重新设计——如果 IPC 机制不能很好地适应 epoll,那几个月的工作对我来说就白费了
  • 快——如果这个机制不比套接字快,那么不值得花时间去实现它
  • 在执行过程中灵活且(重新)可配置——我相信这排除了 MPI & al
  • 不需要多线程。

我愿意为不同的平台使用不同的机制,只要它们都使用相同的范例。我也愿意尽可能深入地了解 C/C++/Obj-C 以实现特定于平台的绑定。

有什么建议吗?

谢谢。

0 投票
1 回答
1982 浏览

ssl - 将 SSL 添加到基于 IOCP 的 Windows 服务器的最简单方法是什么?

我有一个基于 IOCP 的服务器,我们已经使用了很长时间。现在我们需要为此添加 SSL 支持。我正在努力寻找一个干净的解决方案。我发现其他两个线程中建议的两个选项 -

1) 使用 openssl Memory BIO - 但在网上没有找到任何与 IOCP 端口一起使用的示例,这些示例解释了由于 IOCP 的多线程性质而将出现的问题。2) 将 Boost ASIO 与 ssl 一起使用——我认为它在内部使用 IOCP。但是没有示例显示如何存储每个连接状态数据 - 例如,在我们的服务器中,为每个连接的客户端存储状态信息,此状态信息用于识别客户端并相应地解析客户端发送的数据。

如果您能建议解决上述两个问题或任何其他对您有用的解决方案,我将不胜感激。

更新:我正在使用 Simple C 在 winsock2 库中实现 IOCP。

最好的问候尼拉德里

0 投票
3 回答
1337 浏览

c++ - 在接受后 TCP IOCP 不会收到

我正在尝试编写一个 IOCP 服务器。基本上,我让它接受新的连接。出于测试目的,我正在运行并连接到 127.0.0.1。

我在调用 AcceptEx() 之前创建了伪套接字。一旦连接被接受,新的伪套接字将用于通信。这个新套接字与一个 io 完成端口 [CreateIoCompletionPort] 相关联,然后我为其分配了几个选项 [SO_EXCLUSIVEADDRUSE] 和 [SO_CONDITIONAL_ACCEPT],然后我调用 WSARecv() 来接受传入数据。

问题是,一旦我的远程连接连接到服务器,它就会发送数据,但永远不会收到该数据。我想知道是否有人可以就它为什么不接收数据提供一些想法?也许我的逻辑有缺陷?我多次单步执行我的代码。没有错误记录。

编辑:修正了措辞。我在 AcceptEx() 调用之前创建了套接字。

我的代码中的基本逻辑:

注意:我尝试从伪套接字发送到远程套接字,与以相反方式发送数据的问题相同。

0 投票
6 回答
9952 浏览

delphi - 并行 ping 多个网络设备的最佳方法是什么?

我通过迭代 ping 轮询网络中的许多设备(超过 300 个)。

该程序按顺序轮询设备,因此速度很慢。我想提高轮询的速度。

在 Delphi 7 中有一些方法可以做到这一点:

  1. 每个设备都有一个执行 ping 的线程。手动管理线程。
  2. 学习和使用 Indy 10。需要示例。
  3. 使用基于窗口消息的重叠 I/O。
  4. 使用基于事件的完成端口。

什么是更快,更容易?请提供一些示例或链接,例如。

0 投票
3 回答
28809 浏览

windows - I/O完成端口的优缺点

为什么很多人说 I/O 完成端口是一个又快又好的模型?
I/O完成端口的优缺点是什么?

我想知道一些使 I/O 完成端口比其他方法更快的点。

如果你能和其他模型(select、epoll、传统的多线程/多进程)相比解释一下,那就更好了。