|
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 26
|
|
Сокеты, одновременная работа с несколькими клиентами !!!26.02.2012, 21:31. Показов 12405. Ответов 52
Метки нет (Все метки)
Привет, совсем запутался с сокетами. Нужно такое приложение, которое будет обрабатывать сразу много клиентов. Причем в такой схеме может возникнуть ситуация, что сервер может начать работать с одним клиентом, потом начать со вторым в другом потоке, закончить работу со вторым и вернуть ему результат, и потом закончить работу уже с первым и вернуть ему свой результат.
Какой тип сокетов мне использовать? Схема работы сервера такая: он должен получать все сообщения от множества клиентов и добавлять их в очередь, далее после каждого добавленного сообщения в очередь вызывается функция на проверку есть ли свободные потоки, и если есть то передать свободному потоку id клиента и его запроса, далее этот поток должен обработать запрос, вернуть клиенту результат, снова вызвать функцию на проверку очереди и самозавершиться. Если с потоками разобрался, то с сокетами беда вообще. Возможно существует какой-нибудь простой класс для сокитов под линукс, чтобы можно было создать сокет, добавить к нему функцию обрабатывающую событие поступления нового сообщения от клиентов, и функцию ответа клиенту по его id номеру. В си новичок, просьба не пинать. Спасибо!
0
|
|
| 26.02.2012, 21:31 | |
|
Ответы с готовыми решениями:
52
Одновременная работа с несколькими ST-LINK/V2 в IAR сессии и одновременная работа под несколькими пользователями |
|
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 26
|
||||||
| 28.02.2012, 16:39 [ТС] | ||||||
Возможно это из за того, что сокеты открываются по идеи через сам php, а это одно приложение? Как же тогда работает тот же редис или mysql ... там одновременно много подключений делается.
0
|
||||||
|
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 26
|
|
| 29.02.2012, 02:37 [ТС] | |
|
Подскажи какой командой проверить можно? Файл сервера висит в процессах, называется server
Добавлено через 1 час 25 минут Еще выявил такой косяк, код твой полностью, отправляет клиент сообщение вида "STROKA TEST" обрабатывает и отвечает. При втором соединении клиент отправляет сообщение вида "TEST". После завершения чтения при попытке сделать message.get() получаем сообщение "TESTOKA TEST". Тоесть я так понимаю он буфер не очищает. Совсем запутался как работает вся эта система, как такое может быть если message внутри on_accept_handler как локальная переменная создаётся?
0
|
|
|
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 26
|
||||||
| 29.02.2012, 14:54 [ТС] | ||||||
|
Через телнет проверил, многопоточность работает, но через php никак не хочет. В чем же дело?
Вот код. У меня два потока вручную задано. Отправляю первое сообщение "TEST". Все ок принимает правильно. Отправляю второе "TES", принимает как надо. Отправляю третье "TE", четвертое и т.д. получаем в message.get() что-то вроде "TE0?(". Иногда такая картина наблюдается уже со второго сообщения. Свои функции закомментировал.
https://github.com/antirez/hiredis
0
|
||||||
|
|
|||
| 29.02.2012, 16:17 | |||
|
1
|
|||
|
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 26
|
|
| 29.02.2012, 16:59 [ТС] | |
|
Проблему с передаваемым текстом решил. Теперь осталось решить вопрос как запускать одновременные подключения из под php приложения. Не подскажешь?
0
|
|
|
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 26
|
||||||
| 29.02.2012, 17:19 [ТС] | ||||||
НО когда я элементарно создаю в браузере две вкладки 127.0.0.1/connect.php и почти одновременно жду обновить, в первой ответ приходит через 10с, во второй через 20с. В самом сервере также видно что он сначала принимает первого клиента, и только после закрытия соединения принимает второго. Добавлено через 22 секунды Как это php-шное ограничение можно обойти? Добавлено через 4 минуты Мне надо в итоге получить такую связку, чтобы несколько одновременных запросов от разных посетителей сайта сервер обрабатывал, и вот тут пхп этого не дает сделать(
0
|
||||||
|
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 26
|
|
| 29.02.2012, 18:01 [ТС] | |
|
А как это дело организовать через php-extension? там же можно только функции свои добавить, будет ли там работать неблокирующий режим?
0
|
|
|
|
|
| 02.03.2012, 12:41 | |
|
Kirm, ну что, разобрался?
0
|
|
| 02.03.2012, 12:41 | |
|
Одновременная работа с XML файлом несколькими людьми сервер чата с несколькими клиентами Совет по работе с несколькими TCP клиентами
Одновременная запись в файл несколькими потоками Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
[golang] Конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
alhaos 10.06.2026
Задача
Реализовать конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
Сигнатура
func Fetch(urls string, maxConcurrent int) Result
Пример
urls :=. . .
|
[golang] Состояние гонки (race condition)
alhaos 10.06.2026
Состояние гонки (race condition)
Состояние гонки (Race Condition) — это ошибка, возникающая при одновременном доступе нескольких горутин к одним и тем же данным без должной синхронизации. При этом. . .
|
Взрослые отношения, и почему они не получаются
kumehtar 09.06.2026
Когда в детстве ребёнок не получает от родителей чего-то важного, он лишается не просто приятных переживаний, а основы для формирования определённых внутренних качеств и навыков. Если ребёнок не. . .
|
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool
Worker Pool — паттерн конкурентной обработки задач в Go.
Суть: фиксированное количество горутин-воркеров читают задачи из общего канала
и пишут результаты в общий канал результатов. . . .
|
|
[golang] Pipeline
alhaos 08.06.2026
Pipeline
Pipeline — паттерн конкурентной обработки данных в Go.
Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
|
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь
lIs4oanZS9Y
|
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу.
До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
|
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений.
. . .
|