![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ServerSocket :: What are differents? [D7, WinXP]
Alexey (AZ) © (2006-11-13 13:01:00)servertype - тип сервера. Может принимать одно из двух значений: stnonblocking - синхронная работа с клиентскими сокетами. При таком типе сервера Вы можете работать с клиентами через события onclientread и onclientwrite. stthreadblocking - асинхронный тип. Для каждого клиентского сокетного канала создается отдельный процесс (thread).
Добрый день. Сразу введу в курс дела. Нужен сервер, к которому могут только подключаться и отправлять инфу, отключением клиентов занимаюсь я. Есть идея сделать по таймеру так...
for i:=1 to Serv.Socket.ActiveConnections do
Memo1.Text := Serv.Socket.Connections[i-1].ReceiveText;
...и считывать с клиенов их послания так, а НЕ через событие ClientRead, затем отключать. Вопросы:
1) Будет ли накапливаться где-то инфа, если клиент отключится до того как я считаю (после дисконнекта я считать не смогу)?
2) Какой размер этого буфера?
3) СтОит ли копать в сторону stBlocking? Если да, то на что обратить внимание? (сейчас стоИт stNonBlocking)
Благодарю за внимание.
Сергей М. (2006-11-13 15:21:00) [21]
> 2) Какой размер этого буфера?
см. ф-цию Winsock.GetSockOpt(), опция SO_RCVBUF
> 3) СтОит ли копать в сторону stBlocking?
Стоит, если транспортный тред не будет заниматься ничем иным, как только приемом/передачей
DVM (2006-11-13 15:17:00) [22]т.е. 1 и 0 наоборот
DVM (2006-11-13 15:15:00) [23]
> Кроме (не)блокирующих есть еще синхронные/асинхронные,
я в курсе
> а в статье между ними поставлен знак равенства.
Я безотносительно статьи какой-то там. Я ее даже не глядел.
> Синхронный сокет совсем не обязан блокировать поток и наоборот.
Согласен, но я про синхронность/асинхронность даже не упоминал.
> Потоки сами по себе, а сокеты сами по себе.
А никто не говорит, что они как-то пересекаются.
Я имел ввиду, что функции работы с блокирующими сокетами блокируют вызывающий поток. Те же самые функции немедленно возвращают управление для сокетов находящихся в неблокирующем режиме.
Для меня блокирующий сокет это сокет для кторого выполнено
Block := 1;
ioctlsocket(Socket, FIONBIO, Block);
Неблокирующий:
Block := 0;
ioctlsocket(Socket, FIONBIO, Block);
Anatoly Podgoretsky (2006-11-13 15:01:00) [24]> DVM (13.11.2006 14:08:05) [5]
> Вторые программировать сложнее немного.
> Для сервера используют чаще блокирующие сокеты, помещая в потоки, для клиентов неблокирующие, хотя это как кому нравится.
Не могу согласиться не с первым, не со вторым тезисом, особенно про потоки.
Кроме (не)блокирующих есть еще синхронные/асинхронные, а в статье между ними поставлен знак равенства. Синхронный сокет совсем не обязан блокировать поток и наоборот. К сожалению здесь ноги растут из такой глубины, из-за различия в терминологии на ранних стадиях развитияю. Я бы просто не использовал термины блокирования, как малоговорящие.
Потоки сами по себе, а сокеты сами по себе.
--
DVM (2006-11-13 14:08:00) [25]
> сокетного канала создается отдельный процесс (thread).
Может поток все-таки?
> 1) Будет ли накапливаться где-то инфа, если клиент отключится
> до того как я считаю (после дисконнекта я считать не смогу)?
>
Где она будет накапливаться, сам копи ее, считывая в определенном событии.
> 2) Какой размер этого буфера?
Какой сделаешь, такой и будет.
> 3) СтОит ли копать в сторону stBlocking? Если да, то на
> что обратить внимание? (сейчас стоИт stNonBlocking)
Без разницы. Можно и так и так хорошо сделать.
> Т.е. я прошу объяснить различия между типами сокетов, и
> хочу узнать что для каких целей применять.
Между блокирующими и неблокирующими? Первые блокируют вызывающий поток во время операций с сокетом, вторые нет. Вторые программировать сложнее немного.
Для сервера используют чаще блокирующие сокеты, помещая в потоки, для клиентов неблокирующие, хотя это как кому нравится.
Anatoly Podgoretsky (2006-11-13 13:55:00) [26]> Alexey (AZ) (13.11.2006 13:39:03) [3]
Не, ну я на подобный источник не пойду, за здоровье опасаюсь.
Что значит нужно? и что значит лучше?
Это же задачей определяется.
--
Alexey (AZ) (2006-11-13 13:39:00) [27]Справка отсюда:
http://articles.org.ru/cfaq/index.php?qid=1891&frommostrecent=yes
Я честно говоря в некотором замешательстве... что из методов/событий/свойств этого сокета мне нужно использовать (т.е. что ЛУЧШЕ использовать, т.к. я уже два способа перепробовал).
Anatoly Podgoretsky (2006-11-13 13:17:00) [28]Ну во первых откуда такая справка, там все наоборот, а во вторых это тип работы сокета, с блокированием и не блокированием потоков, и больше ни чего.
Alexey (AZ) (2006-11-13 13:10:00) [29]Т.е. я прошу объяснить различия между типами сокетов, и хочу узнать что для каких целей применять.