Комментарии 13
Что ж, гораздо лучше, чем предыдущий «сервер на Qt»!
Но, опять таки, где же потоки? Тут достаточно было бы MyClient унаследовать от QThread и всю работу поместить в run().
Из замечаний не по серверу: строки для экономии лучше передавать как const QString & — для избежания лишнего копирования. Если сервер будет хорошо нагружен, то это может оказаться важным.
Но, опять таки, где же потоки? Тут достаточно было бы MyClient унаследовать от QThread и всю работу поместить в run().
Из замечаний не по серверу: строки для экономии лучше передавать как const QString & — для избежания лишнего копирования. Если сервер будет хорошо нагружен, то это может оказаться важным.
+1
(да, я знаю, что строки в Qt копируются только при необходимости и обычный copy-ctor работает за константное время, но это время на сервере тоже иногда имеет смысл экономить)
+1
На счет потоков — стоит ли так делать для чата даже не знаю, в таком случае в памяти будет висеть (даже не просто висеть, а кушать время процессора?) столько потоков, сколько есть активных подключений, даже если нету активности (никто ни кому ничего не пишет).
0
Это если реализовывать поток как конечный автомат — но ведь можно и иначе, поток запускать только при активности, если активность высокая, то можно его и всё время в памяти держать.
Есть и другой вариант (самый, на мой взгляд, интересный) — создать столько потоков, сколько ядер в системе, и перераспределять между ними нагрузку.
Без потоков, мне кажется, не обойтись, если хочешь сделать высоконагруженный сервер.
Есть и другой вариант (самый, на мой взгляд, интересный) — создать столько потоков, сколько ядер в системе, и перераспределять между ними нагрузку.
Без потоков, мне кажется, не обойтись, если хочешь сделать высоконагруженный сервер.
0
Потоки там не нужны, не такая большая нагрузка. В свое время делал лабу (тоже клиент-сервер чат), чистое WinAPI, вместо GUI использовал CUI, где-то даже еще хранится. Для обработки подключений использовал динамический pool потоков. В итоге максимум было 2 активных потока.
0
Везет Вам с лабами по Qt…
0
СДЕЛАЛ ЛАБУ @ ВЫЛОЖИ НА ХАБР
+13
может стоить завести блог «о Qt для новичков»?
P.S.
Капитан очевидность одобряет.
P.S.
> QTcpSocket *_sok; //сокет
> //создаем сокет
> _sok = new QTcpSocket(this);
Капитан очевидность одобряет.
+1
Копипаста — это плохо. У вас например doSendToAllServerMessage отличается от doSendToAllMessage менее чем одной строчкой. Как и doSendToAllUserJoin от doSendToAllUserLeft. Ну и первые два от вторых двух тоже отличаются минимально.
Чем добавление сервера в друзья к клиенту лучше добавления одного простенького метода MyClient::write(const QByteArray&) — тоже не очень понятно.
Чем добавление сервера в друзья к клиенту лучше добавления одного простенького метода MyClient::write(const QByteArray&) — тоже не очень понятно.
0
Где вы были пол года назад когда я мучался с сокетами для передачи даных.
Првда за пример взял другой чат thesmithfam.org/blog/2009/07/09/example-qt-chat-program/ вот отсюда
Првда за пример взял другой чат thesmithfam.org/blog/2009/07/09/example-qt-chat-program/ вот отсюда
0
Кстати, чтобы код нормально работал под qt >= 5.0.1, нужно в myserver.h и myserver.cpp заменить сигнатуру
на сигнатуру
Описание проблемы есть вот тут.
void incomingConnection(int handle);
на сигнатуру
void incomingConnection(qintptr handle);
Описание проблемы есть вот тут.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Клиент-серверный чат, используя сокеты Qt/C++