问题标签 [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.
winapi - 传输文件 + SChannel
我正在使用带有 I/O 完成端口的 TransmitFile API 在 Windows 上实现高效的多线程文件服务器。
这一切都很好,但我现在也使用SChannel实现了安全套接字。因为 TransmitFile 将文件直接流式传输到套接字,所以我看不到调用 EncryptMessage 的方法 - 我需要分块读取文件,手动加密和传输它们吗?
当 TransmitFile 仅出于高性能文件传输的目的而提供时,这似乎有点愚蠢,并且安全套接字非常普遍。我想知道 IIS 做了什么,考虑到我相信 TransmitFile 首先是为 IIS 实现的?
(我最初制作了“TransmitFile”和“EncryptMessage”超链接,但垃圾邮件保护只允许一个 - 抱歉)
c++ - 我对基于套接字的模型的图形表示和解释
http://img600.imageshack.us/img600/3567/graphicrepresentation.png
我的推理方式正确吗?如果是这样,谁能告诉我,就像上面的方案一样,I/O 完成端口将如何工作?在我开始学习如何为 MMORPG 制作高性能服务器之前,我想确定这一切是如何工作的。
c# - 测试 I/O 完成端口支持
我在 SMTP 邮件服务器 ( LumiSoft Mail Server )的代码中找到了以下代码。根据方法名,测试平台是否支持I/O Completion Ports。
它似乎工作正常,但在 Mono/Linux 上失败了。该方法SendToAsync
,正如它的名字所说,异步执行。它甚至在另一个线程中执行。但是,当它开始执行时,该方法的 finally 部分已经关闭了套接字并ObjectDisposedException
在另一个线程中导致了一个。
那么,测试 IOCP 支持的技术是否不正确?为什么它可以在 Windows 上运行?测试 IOCP 支持的正确方法是什么?
c++ - 如何使用 IOCP 将用户定义的数据传递给工作线程?
嘿...我使用 I/O 完成端口和 winsock 创建了一个小型测试服务器。我可以成功连接套接字句柄并将其与完成端口相关联。但我不知道如何将用户定义的数据结构传递到工作线程......
到目前为止,我尝试的是(ULONG_PTR)&structure as
在关联调用中将用户结构作为完成键传递,CreateIoCompletionPort()
但这不起作用。
现在我尝试定义自己的 OVERLAPPED 结构并使用 CONTAINING_RECORD(),如此处所述http://msdn.microsoft.com/en-us/magazine/cc302334.aspx和http://msdn.microsoft.com/en-us /杂志/bb985148.aspx。但这也行不通。(我得到 pHelper 内容的怪异值)
所以我的问题是:如何使用 WSARecv()、GetQueuedCompletionStatus() 和 Completion 数据包或 OVERLAPPED 结构将数据传递给工作线程?
编辑:我怎样才能成功传输“每个连接数据”?...似乎我做错了艺术(如上面两个链接中所述)。
这是我的代码:(是的,它很丑,也是唯一的测试代码)
c++ - 带有任务调度程序的 IOCP(线程构建块)
我正在使用 TBB,并且想知道如何将 IOCP 与它的任务调度程序一起使用。有人做过吗?如果是这样,一些细节将不胜感激。
我对 IOCP 没有太多经验,但我想用它来向我的所有线程发送消息,并且在任务调度程序之外,你可以给它线程的句柄。但是在 TBB 中,我并不完全确定如何可靠地获取线程句柄。
谢谢!
c - 为事件驱动的应用程序选择 IPC 解决方案
我目前正在研究一个相当大的单线程、基于事件的应用程序,该应用程序围绕 Linux 下的 epoll 和其他平台下的类似技术设计。目前,每当我们希望两个实例进行通信时,它们通常通过套接字进行,无论它们是否在同一台机器上运行。出于性能原因,我设想使用某种形式的 IPC 来加速同一台机器的通信。现在,我需要决定使用哪种 IPC 机制。
以下因素对我很重要:
- 事件驱动,没有完全重新设计——如果 IPC 机制不能很好地适应 epoll,那几个月的工作对我来说就白费了
- 快——如果这个机制不比套接字快,那么不值得花时间去实现它
- 在执行过程中灵活且(重新)可配置——我相信这排除了 MPI & al
- 不需要多线程。
我愿意为不同的平台使用不同的机制,只要它们都使用相同的范例。我也愿意尽可能深入地了解 C/C++/Obj-C 以实现特定于平台的绑定。
有什么建议吗?
谢谢。
ssl - 将 SSL 添加到基于 IOCP 的 Windows 服务器的最简单方法是什么?
我有一个基于 IOCP 的服务器,我们已经使用了很长时间。现在我们需要为此添加 SSL 支持。我正在努力寻找一个干净的解决方案。我发现其他两个线程中建议的两个选项 -
1) 使用 openssl Memory BIO - 但在网上没有找到任何与 IOCP 端口一起使用的示例,这些示例解释了由于 IOCP 的多线程性质而将出现的问题。2) 将 Boost ASIO 与 ssl 一起使用——我认为它在内部使用 IOCP。但是没有示例显示如何存储每个连接状态数据 - 例如,在我们的服务器中,为每个连接的客户端存储状态信息,此状态信息用于识别客户端并相应地解析客户端发送的数据。
如果您能建议解决上述两个问题或任何其他对您有用的解决方案,我将不胜感激。
更新:我正在使用 Simple C 在 winsock2 库中实现 IOCP。
最好的问候尼拉德里
c++ - 在接受后 TCP IOCP 不会收到
我正在尝试编写一个 IOCP 服务器。基本上,我让它接受新的连接。出于测试目的,我正在运行并连接到 127.0.0.1。
我在调用 AcceptEx() 之前创建了伪套接字。一旦连接被接受,新的伪套接字将用于通信。这个新套接字与一个 io 完成端口 [CreateIoCompletionPort] 相关联,然后我为其分配了几个选项 [SO_EXCLUSIVEADDRUSE] 和 [SO_CONDITIONAL_ACCEPT],然后我调用 WSARecv() 来接受传入数据。
问题是,一旦我的远程连接连接到服务器,它就会发送数据,但永远不会收到该数据。我想知道是否有人可以就它为什么不接收数据提供一些想法?也许我的逻辑有缺陷?我多次单步执行我的代码。没有错误记录。
编辑:修正了措辞。我在 AcceptEx() 调用之前创建了套接字。
我的代码中的基本逻辑:
注意:我尝试从伪套接字发送到远程套接字,与以相反方式发送数据的问题相同。
delphi - 并行 ping 多个网络设备的最佳方法是什么?
我通过迭代 ping 轮询网络中的许多设备(超过 300 个)。
该程序按顺序轮询设备,因此速度很慢。我想提高轮询的速度。
在 Delphi 7 中有一些方法可以做到这一点:
- 每个设备都有一个执行 ping 的线程。手动管理线程。
- 学习和使用 Indy 10。需要示例。
- 使用基于窗口消息的重叠 I/O。
- 使用基于事件的完成端口。
什么是更快,更容易?请提供一些示例或链接,例如。
windows - I/O完成端口的优缺点
为什么很多人说 I/O 完成端口是一个又快又好的模型?
I/O完成端口的优缺点是什么?
我想知道一些使 I/O 完成端口比其他方法更快的点。
如果你能和其他模型(select、epoll、传统的多线程/多进程)相比解释一下,那就更好了。