Я создаю многопользовательский сервер (IRC) в C ++, используя Qt lib. Я хотел бы знать, хороший ли это подход к архитектуре сервера.
Я хотел бы избежать создания потока для каждого соединения, поэтому я подумал, что мог бы иметь все клиентские сокеты в каком-то контейнере и выполнять действия (например, обработку входящего пакета) с помощью ThreadPool.
Мое единственное беспокойство заключается в том, имеют ли розетки, подключенные к SLOT
гарантирует параллельную обработку клиента.
Код:
CServer::CServer(QObject *parent) : QTcpServer(parent)
{
server = new QTcpServer(this);
connect(server, SIGNAL(newConnection()), this, SLOT(newConnection()));
if(!server->listen(QHostAddress::Any, 6667))
qDebug() << "Oh noes";
}
void CServer::newConnection(){
add server->nextPendingConnection() to the container
}
Может быть, этот пример поможет вам: http://www.qtcentre.org/wiki/index.php?title=Multi_client_server_without_threading
Других решений пока нет …