У меня возникли проблемы с синхронизацией потоков и сокетов. Мне нужен один поток, чтобы получать входящие соединения в сокете (и помнить данные клиента для ответа) и другой поток для установки фреймов и отправки текущего кадра указанным клиентам. Поэтому мне было интересно, может ли его (kinda) поместить мои кадры данных в серверный сокет, чтобы каждый мог просто читать текущий кадр из сокета без знания сервера.источник данных emiter C++
Сервер будет просто спам сокета с некоторыми данными, и клиент получит данные без действий сервера. Это возможно? как?
В настоящее время я делаю это довольно перепутались путь, который я не люблю:
- сервер прослушивает один поток для входящих передач и при reciving таких, добавить данные клиента в список.
- на другом потоке сервер отправляет данные всем клиентам из списка.
EDIT:
Я хочу, чтобы отправить данные в какой-то буфер, из которого клиенты могут читать. (клиент не должен читать все сообщения сервера отправляет, только один буфер содержит в момент запроса клиентов), я не хочу, чтобы сервер даже заметил, что клиенты читают из буфера, если это возможно.
Сейчас нити syncronised с помощью uniqe_lock
Трудно прочитать ваш вопрос: пытаетесь ли вы передавать одни и те же данные нескольким клиентам и хотите отправить их один раз для всех, а не повторно для каждого? – ams
Не могли бы вы предоставить [mvce] (http://stackoverflow.com/help/mcve)? –
Прежде чем думать о сроках сокетов, опишите, что вы хотите. До сих пор я понял, что: 1. клиент подключается к серверу и говорит, что ему нужны данные 2. сервер готовит кадр для этого клиента 3. клиент возвращается, чтобы прочитать свои собственные данные. Что я не мог догадаться: как идентифицировать клиента (они?) По IP? по id? Читают ли они свои данные или все данные или последние данные (то же самое для всех клиентов). Это не должно быть сложно спроектировать ... как только мы узнаем, что ожидается! –