Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Обсуждение статей
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2009, 17:20   #201
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Я намерено запихнул в команду личного сообщения ник того, кому сообщение предназначается, ...это работает эффективнее, к тому же идет защита. Если случайно совпадет сторонняя команда на 2 первых байта, то сервер либо падет, либо неверно адресует приват. Если у вас будет система регистрации, то она просто не даст вводить ник, который уже существует в БД, об этом я уже писал выше.

При отключении клиента ничего не требуется, сервер сам "понимает" момент "отпада" или корректного отключения и обновляет списки, отсылая всем клиентам.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 16.06.2009, 19:26   #202
mnbvcxz11
Пользователь
 
Аватар для mnbvcxz11
 
Регистрация: 07.05.2009
Сообщений: 36
Вопрос Перегрузка сервера

Какой серверный ПК нужен по мощности?
Сколько примерно клиентов может обработать сервер?
mnbvcxz11 вне форума Ответить с цитированием
Старый 16.06.2009, 22:50   #203
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Не пытайтесь в таком виде как сейчас использовать в качестве глобального чата, ...теоретически на сокет одновременно можно посадить в районе 30 тыс. клиентов, но вот когда вы будете обновлять список, будут тормоза, по любому поводу рассылка строчки длиной достаточно большой. Сейчас до 256 клиентов одновременно. Если надумаете больше, создавайте команды: "Новый клиент вошел" и "Клиент покинул чат", чтобы трафик был минимальным, и обработка была быстрее.
Сервер - любой ПК, главное - широкий канал, более 1Мбит/с, если клиентов много.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 17.06.2009, 09:10   #204
spirit-ua
Форумчанин
 
Аватар для spirit-ua
 
Регистрация: 04.06.2009
Сообщений: 351
По умолчанию

Цитата:
Сообщение от Beermonza Посмотреть сообщение
При отключении клиента ничего не требуется, сервер сам "понимает" момент "отпада" или корректного отключения и обновляет списки, отсылая всем клиентам.
Да я понимаю что сервер видит отпад клиента, хочется сделать чтоб при отвале клиента сервер выдавал сообщение всем что пользователь Пупкин разорвал связь. Решать со стороны сервера, по моим соображениям, не совсем эффективно т.к. нада следить за списком, сверять его, при разрыве клиента сопоставлять списки и т.д, проще клиенту отослать сообщение что он отваливается и уже сервер пускай разсылает остальным.
Но как впихнуть это в процедуру отключения клиента "Dicconnect" или закрытия формы без таймеров и задержек никак не могу догнать...
Просьба к автору разжевать мне ЭТОТ вопрос (именно отправка сообщения перед разрывом соедининия)
Мне разрешено открывать только одну страницу - about :blank. Сперва было скучно, но потом я втянулся. Теперь у меня там живет 2 виртуальных друга, и я слышу голоса из розетки!
spirit-ua вне форума Ответить с цитированием
Старый 17.06.2009, 16:32   #205
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Сразу запомните раз и на всегда - клиенту ничего нельзя поручать выполнить, рассчитать и отослать серверу, поскольку он клиент, и этим все сказано, ...при всем уважении, на программном уровне к нему ноль доверия изначально.

Можно поступить совсем просто, не позволяя клиенту управлять сервером, и не загружая сервер расчетами, ведь он итак знает кто отвалился, раз шлет новую строку списка, и ему знать кто конкретно нет надобности, ...разумеется, если сервер - центральный узел, не средство общения. Так вот, ...у нас клиент получает строку списка пользователей в процедуре ClientSocketRead, смотрите case 2: , перед очисткой списка UserListView, загоните его содержимое в массив, дальше пусть код все проделает что написано, в конце параллельно в цикле проверяйте новый список и массив, если в массиве значится другой ник на очередном пункте, то выводим его на экран с техническими данными, мол "Клиент, ник, отключился, время", и перепрыгиваем на следующую ячейку массива а в списке значится прежняя, и так дальше. В принципе все просто, две переменные счетчика, та что отвечает за массив - скачет )).
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 17.06.2009, 17:07   #206
spirit-ua
Форумчанин
 
Аватар для spirit-ua
 
Регистрация: 04.06.2009
Сообщений: 351
По умолчанию

Цитата:
Сообщение от Beermonza Посмотреть сообщение
Сразу запомните раз и на всегда - клиенту ничего нельзя поручать выполнить, рассчитать и отослать серверу, поскольку он клиент, и этим все сказано, ...при всем уважении, на программном уровне к нему ноль доверия изначально.
Это все верно и соответствует логики построения задач клиент-сервер и все же есть несколько но:
1. Когда клиент отсылает текст.сообщение он
Цитата:
Сообщение от Beermonza Посмотреть сообщение
рассчитать и отослать серверу
хочет-не хочет отсылает команду серверу и указывает что это текст.сообщение которое нужно отослать всем клиентам, так почему же при отвале клиента не послать ТЕКСТ.СООБЩЕНИЕ что я мол отваливаюсь?
2. Если реализововать регистрацию клиентов на сервере на предмет несовпадения ников то отсылается ник, пароль, запрос на разрешение регистрации и т.д. Я хочу реализовать поключение клиентов с разными правами (админ, модератор, юзер) которые имеют привилегии (бан, кик и т.д.) - как быть в ЭТОМ случае с отсылкой команд серверу??? или ВЫ хотите сказать что при, хотя бы в 100-200 клиентов, этим должен заниматься сервер??? как это реализовать только одним сервером??? Писать алгоритм на мат, флуд, оскорбление, унижение, злоупотребление шрифтами, цветом и размером текста и т.д. или проще чтоб было несколько человек которые имели право забанить, кикнуть и т.д. - тогда опять же нада слать команды с клиента серверу...
3. Можна налепить в чат много чего полезного (запрос точного времени и даты, информации о клиенте которая будет вводиться при регистрации, выдача сервером фразы дня или анекдота и т.д.), все это уже смахивает на IRC-канал но тем не мение... и все это упирается в команды серверу!!!

Хочу получить ответ от автора по каждому пункту.
Мне разрешено открывать только одну страницу - about :blank. Сперва было скучно, но потом я втянулся. Теперь у меня там живет 2 виртуальных друга, и я слышу голоса из розетки!
spirit-ua вне форума Ответить с цитированием
Старый 17.06.2009, 19:16   #207
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Хорошо, буду рассуждать логически.

Цитата:
1. Когда клиент отсылает текст. сообщение он хочет-не хочет отсылает команду серверу и указывает что это текст.
сообщение которое нужно отослать всем клиентам, так почему же при отвале клиента не послать ТЕКСТ.СООБЩЕНИЕ что я мол
отваливаюсь?
Когда клиент шлет текст, он не управляет сервером, ...сервер в виду своего спец. алгоритма перенаправляет его остальным, ...если вы вставите дополнительные проверки, то сервер сразу перенаправлять не будет. По сути мы имеем дело с клиентским ЗАПРОСОМ - "я клиент, хочу чтобы мир увидел мое сообщение". Однако если вы дадите возможность клиенту отсылать предкоманду "я ухожу" да еще и встроите простую систему по порядковому номеру а не по нику (как в привате), то придется делать двойную проверку на канал и на индекс, если на индекс не делать, что сейчас происходит, ...то с любого клиента зная код команды и индекс можно выкинуть любого из чата. И еще один момент, если будут проблемы на линии, или не корректный выход, банально перегрузил комп клиент, то сервер ничего не получит, и будет считать что в списке клиент есть, а в канале его уже нет (система автоматическая), произойдет падение сервера, ...вот по этому при любом истечении обстоятельств любой выход клиента нужно рассматривать как "отпад, потеря связи".

Цитата:
2. Если реализововать регистрацию клиентов на сервере на предмет несовпадения ников то отсылается ник, пароль,
запрос на разрешение регистрации и т.д. Я хочу реализовать поключение клиентов с разными правами (админ, модератор, юзер)
которые имеют привилегии (бан, кик и т.д.) - как быть в ЭТОМ случае с отсылкой команд серверу??? или ВЫ хотите сказать что
при, хотя бы в 100-200 клиентов, этим должен заниматься сервер??? как это реализовать только одним сервером??? Писать
алгоритм на мат, флуд, оскорбление, унижение, злоупотребление шрифтами, цветом и размером текста и т.д. или проще чтоб
было несколько человек которые имели право забанить, кикнуть и т.д. - тогда опять же нада слать команды с клиента серверу...
Это легко выполняется через запросы, не напрямую. Вы только шлете что хотите сделать, а сервер не подчиняется вам посредством простого набора Case, ...он должен проверить несколько параметров: канал, ник, статус, команду, составные части, кого, есть ли он, его канал, ник ...вы меня понимаете? ...управления сервером нет, есть запрос, а сервер сам решает выполнять или нет. Разумеется, систему кодирования на команды привилегированных, да и всех в целом не мешало бы.

Цитата:
3. Можна налепить в чат много чего полезного (запрос точного времени и даты, информации о клиенте которая будет
вводиться при регистрации, выдача сервером фразы дня или анекдота и т.д.), все это уже смахивает на IRC-канал но тем не
мение... и все это упирается в команды серверу!!!
Все упирается в запросы серверу. Запрос и команда - разные вещи.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

Последний раз редактировалось Beermonza; 17.06.2009 в 19:29.
Beermonza вне форума Ответить с цитированием
Старый 18.06.2009, 10:07   #208
spirit-ua
Форумчанин
 
Аватар для spirit-ua
 
Регистрация: 04.06.2009
Сообщений: 351
По умолчанию

Цитата:
Сообщение от Beermonza Посмотреть сообщение
1. если будут проблемы на линии, или не корректный выход, банально перегрузил комп клиент, то сервер ничего не получит, и будет считать что в списке клиент есть, а в канале его уже нет...
Систему отключения клиента на сервере я оставил без изминений, сервер сам проверяет активные сое-я, меня интересует как отправить ПРОСТО ТЕКСТ (не команду) при закрытии сое-я клиентом что я мол выхожу. А дойдет текст.сообщение до сервера при некоррекном выходе это уже не важно для сервера, он увидит овал сое-я в любом случае и сделает свое дело, а если ему придет перед отвалом текстовое сообщение он отправит его всем остальным. Вопрос состоит в том как отправить текстовое сообщение перед оключением клиента.

Цитата:
Сообщение от Beermonza Посмотреть сообщение
2. Это легко выполняется через запросы, не напрямую. Вы только шлете что хотите сделать, а сервер не подчиняется вам посредством простого набора Case, ...он должен проверить несколько параметров: канал, ник, статус, команду, составные части, кого, есть ли он, его канал, ник ...вы меня понимаете? ...управления сервером нет, есть запрос, а сервер сам решает выполнять или нет.
Понимаю, нада отослать запрос на соединения с параметрами, а сервер проверяя их решает - цеплять клиента или нет, правильно???

Цитата:
Сообщение от Beermonza Посмотреть сообщение
2. Разумеется, систему кодирования на команды привилегированных, да и всех в целом не мешало бы.
Что имелось ввиду, шифрование текста или разграничение прав пользователей?

Цитата:
Сообщение от Beermonza Посмотреть сообщение
3. Запрос и команда - разные вещи.
Я неправильно выразился...я имел ввиду запрос, а не команду. Запросами можна разграничить права пользователей?
Я так понял клиент шлет запрос на бан другого клиента, сервер у себя проверяет права пользователя который отослал запрос, если право у него(пользователя) есть он(сервер) банит пользователя, если нет - отказ...Правильно???
Мне разрешено открывать только одну страницу - about :blank. Сперва было скучно, но потом я втянулся. Теперь у меня там живет 2 виртуальных друга, и я слышу голоса из розетки!

Последний раз редактировалось spirit-ua; 18.06.2009 в 10:42.
spirit-ua вне форума Ответить с цитированием
Старый 18.06.2009, 16:09   #209
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от spirit-ua Посмотреть сообщение
Систему отключения клиента на сервере я оставил без изминений, сервер сам проверяет активные сое-я, меня интересует как отправить ПРОСТО ТЕКСТ (не команду) при закрытии сое-я клиентом что я мол выхожу. А дойдет текст.сообщение до сервера при некоррекном выходе это уже не важно для сервера, он увидит овал сое-я в любом случае и сделает свое дело, а если ему придет перед отвалом текстовое сообщение он отправит его всем остальным. Вопрос состоит в том как отправить текстовое сообщение перед оключением клиента.
Очень просто, у нас есть ключ 0 - отвечающий за текстовые сообщения, пишите отправку (если шрифты вырезаны):
Код:
ClientSocket.Socket.SendText('0'+NikEdit.Text+':  Отключился');
Отправлять сообщение нужно до дисконнекта.

Цитата:
Сообщение от spirit-ua Посмотреть сообщение
Понимаю, нада отослать запрос на соединения с параметрами, а сервер проверяя их решает - цеплять клиента или нет, правильно???
Вот именно, если все так серьезно, то никаких прямых управлений.

Цитата:
Сообщение от spirit-ua Посмотреть сообщение
Что имелось ввиду, шифрование текста или разграничение прав пользователей?
Шифрование всех пакетов по некому алгоритму, который меняется после каждой отправки, причем и клиент и сервер действуют синхронно. Т.е. если кто-то перехватит пакет и пошлет его в исходном виде, то сервер его не примет, хотя он (пакет) шифрован по правилам, ...просто "устарел", ...дубликат, ...понимаете? Как это сделать - целая наука, вы можете применить статичное кодирование. Если у вас пользователи имеют уровни полномочий, то без кодирования не обойтись, и команд и сообщений, в общем всех пакетов.

Цитата:
Сообщение от spirit-ua Посмотреть сообщение
Я неправильно выразился...я имел ввиду запрос, а не команду. Запросами можна разграничить права пользователей?
Я так понял клиент шлет запрос на бан другого клиента, сервер у себя проверяет права пользователя который отослал запрос, если право у него(пользователя) есть он(сервер) банит пользователя, если нет - отказ...Правильно???
Да. Все верно. Хоть клиент, допустим не видит дополнительных клавиш управления (скрыты), они все равно есть в программе, ...если каким-то образом клиент без полномочий отошлет пакет запроса допустим на бан, сервер его слушать не будет. Не будет слушать по причине, что в базе данных этот клиент не имеет полномочий, и лучший вариант "пометить" клиента штрафом, а лучше - забанить навсегда.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 18.06.2009, 16:19   #210
spirit-ua
Форумчанин
 
Аватар для spirit-ua
 
Регистрация: 04.06.2009
Сообщений: 351
По умолчанию

Цитата:
Сообщение от Beermonza Посмотреть сообщение
Отправлять сообщение нужно до дисконнекта.
Так собственно вопрос: как сделать?
Дисконект происходит раньше за отправку, через таймер или как?
Цитата:
Сообщение от Beermonza Посмотреть сообщение
Шифрование всех пакетов по некому алгоритму...
Это я понимаю, алгоритм буду думать...
Мне разрешено открывать только одну страницу - about :blank. Сперва было скучно, но потом я втянулся. Теперь у меня там живет 2 виртуальных друга, и я слышу голоса из розетки!
spirit-ua вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обновление в блоге - Создание клиент-сервера Pblog Обсуждение статей 0 03.10.2007 17:12
обновление в блоге - Диплом. Создание и продвижение сайта - готовь сани летом, а дипл Pblog Обсуждение статей 0 31.08.2007 20:00
обновление в блоге - USB Холодильник Pblog Обсуждение статей 0 25.06.2007 14:13
обновление в блоге - О ярлыках Pblog Обсуждение статей 0 27.05.2007 03:17