我知道Indy,ICS,Synapse和Clever InetSuite,它们都不支持IOCP.还有什么吗?
编辑:我找到了iocpclasses,它是用Delphi5编写的.我想,总比没有好.
我正在使用winsock和C++来设置服务器应用程序.我遇到的问题是调用listen
导致第一次机会异常.我猜通常这些可以被忽略(?)但是我发现其他人有同样的问题我在哪里导致应用程序偶尔挂起一次.任何帮助将不胜感激.
第一次机会例外是:
MyApp .exe 中0x*12345678*的第一次机会异常:0x000006D9:端点映射器不再提供端点.
我发现一些证据表明这可能是由socket引起的.我正在使用的代码如下所示.listen
从底部调用第五行时发生异常.
m_accept_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (m_accept_fd == INVALID_SOCKET)
{
return false;
}
int optval = 1;
if (setsockopt (m_accept_fd, SOL_SOCKET, SO_REUSEADDR,
(char*)&optval, sizeof(optval)))
{
closesocket(m_accept_fd);
m_accept_fd = INVALID_SOCKET;
return false;
}
struct sockaddr_in local_addr;
local_addr.sin_family = AF_INET;
local_addr.sin_addr.s_addr = INADDR_ANY;
local_addr.sin_port = htons(m_port);
if (bind(m_accept_fd, (struct sockaddr *)&local_addr,
sizeof(struct sockaddr_in)) == SOCKET_ERROR)
{
closesocket(m_accept_fd);
return false;
}
if (listen (m_accept_fd, 5) == SOCKET_ERROR)
{
closesocket(m_accept_fd);
return false;
}
Run Code Online (Sandbox Code Playgroud) 我知道术语"负载平衡"可能非常广泛,但我试图解释的主题更具体,我不知道正确的术语.我正在构建的是一组服务器/客户端应用程序.服务器需要能够处理大量的数据传输以及客户端连接,因此我开始研究多线程.
基本上有3种方法可以看到为服务器实现任何类型的线程......
第三个是我想知道的.这包括这样的设置:
我目前还没有找到任何代码,但有关如何使用这样的设置的信息,以及最好是在Delphi(XE2)中完成此操作的教程.即使是一个适当的单词或名称来填充这个主题就足够了,所以我可以自己进行搜索.
编辑
我发现有必要解释一下这将用于什么.我将流式传输命令和图像,将有一个双插槽设置,其中有一个"主命令套接字"和另一个"附加图像流套接字".所以真正的一个连接是2个套接字连接.
与服务器主套接字的每个连接都创建(或重新使用)表示该连接所需的所有数据的对象,包括线程,图像,设置等.对于与主套接字的每个连接,还连接了流式套接字.它并不总是流式传输图像,但命令套接字始终准备就绪.
关键是我已经在我当前的设置中有一个线程机制(每个会话对象1个线程),我想把它转移到类似池的多线程环境.这两个连接在一起需要对这些线程进行更高级别的控制,我不能依赖像Indy这样的东西来保持这些同步,我宁愿知道事情是如何工作的,而不是学会相信其他东西来完成工作.我.
delphi multithreading load-balancing serversocket delphi-xe2
delphi ×2
c++ ×1
delphi-xe2 ×1
exception ×1
iocp ×1
rpc ×1
serversocket ×1
sockets ×1
winsock ×1