Как я могу управлять соединениями в Инди? (Delphi) - PullRequest
3 голосов
/ 02 июля 2010

Я пишу простую клиент-серверную чат-программу с indy 10 (режим блокировки), и возникает вопрос, как мне управлять соединениями?например, представьте пользователя, который подключен к серверу, и мы должны создать туннель подключения для будущих запросов.Другими словами, когда пользователь находится в сети, сервер не должен требовать имени пользователя и пароля для запросов будущих пользователей.и это будет сделано с туннелем, который мы создали, когда пользователь пришел.

как мы можем управлять соединениями?

[извините за мой плохой английский], если вы не понимаете меня, пожалуйста, сообщитемне отправить новое сообщение agian.

Спасибо

Ответы [ 3 ]

3 голосов
/ 02 июля 2010

Для сценария, описанного в вопросе, управление не так уж и много.Чтобы избежать повторной аутентификации при каждом запросе, просто не закрывайте соединение .В частности, на сервере чата вполне вероятно, что каждый участник установит соединение, а затем продолжит использовать это же соединение на время чата.

Объекты Indy-сервера уже хранят список своих открытых соединений, поэтомуесли вы хотите передать сообщение чата другим участникам, вы можете просто перебрать этот список.

1 голос
/ 02 июля 2010

Я думаю, что 100000 проверок в секунду потребляют меньше ресурсов, чем 10000 постоянных TCP-соединений. И в любом случае вам нужно будет как-то обработать эти 100000 команд, чтобы эти проверки не были узким местом.

Попробуйте вместо этого использовать UDP-сообщения. Например, большинство MMO-игр используют соединения TCP и UDP. TCP только для критических данных и UDP для любых других данных. В вашем случае UDP кажется приемлемым. Клиент может отправлять пакеты UDP с некоторыми идентификаторами автоинкремента, а сервер может периодически отправлять обратно список идентификаторов, которые он не получает, поэтому клиент может отправить их повторно.

0 голосов
/ 02 июля 2010

Одним из вариантов будет создание уникального идентификатора сеанса (или «токена») на стороне сервера, например, GUID, если клиент входит в систему. И в каждый запрос клиент включает этот токен.

Сервер будет вести список клиентских сеансов и связанных с ним данных сеанса и ищет токен в этом списке.

Даже если клиент временно отключен от Интернета, но все еще знает свой токенприложение может повторно подключиться и продолжить сеанс с сервером.

...