Socket Server: управление клиентскими подключениями

Мне интересно, как реализовать управление клиентами для сервера сокетов.

У меня есть случай, когда я хотел бы знать, только что переподключился ли клиент или это новый клиент. Я знаю, так не должно быть. Однако это довольно временный сервер, который можно использовать только в течение нескольких часов.

Я думал о том, чтобы позволить каждому клиенту передавать свой собственный GUID на сервер. Как только сервер «узнает» клиента, он может избавиться от ранее удерживаемых соединений этого клиента.

Как бы вы подошли к этому вопросу? Или это совершенно неприемлемый путь?

Благодарю вас!


person rdoubleui    schedule 25.01.2010    source источник


Ответы (1)


Если вы используете TCP/IP, вы можете использовать IP-адрес и порт для однозначной идентификации клиентов. И вы можете избавиться от соединения после события разъединения. Если IP-адреса и порта недостаточно для однозначной идентификации клиента, вы можете использовать GUID. И снова с TCP/IP во многих случаях вы можете избавиться от соединения после события разъединения.

person Sergey Teplyakov    schedule 25.01.2010
comment
Спасибо, я хотел бы немного больше следовать этому подходу GUID. Это имело бы смысл только в том случае, если бы серверу сообщали, какой GUID имеет каждый клиент. Поэтому мне нужно будет получить от Socket и добавить свой GUID. Но затем у меня возникают проблемы с обработкой всех методов из Socket, которые возвращают экземпляр Socket. - person rdoubleui; 25.01.2010
comment
В большинстве случаев вы должны предпочесть композицию наследованию. Я имею в виду, что вы не должны наследоваться от Socket, вместо этого вы должны создать свой собственный класс, который содержит Socket и GUID. Или ваш серверный класс может содержать словарь с Socket в качестве ключа и GUID в качестве значения. - person Sergey Teplyakov; 25.01.2010
comment
Хорошо, я вижу смысл. Однако моей целью было идентифицировать каждого клиента при подключении (с помощью GUID) к серверу. Думаю, я мог бы отправить GUID в качестве первого сообщения при подключении. Я не вижу другого способа сделать это, а вы? Спасибо за ваш вклад! - person rdoubleui; 27.01.2010
comment
В WCF, например, для каждой сессии также привязан GUID, поэтому я думаю, что это более или менее распространенный подход. - person Sergey Teplyakov; 27.01.2010