C ++ Как реализовать межпроцессное взаимодействие сокетов?

Я хотел бы настроить межпроцессное взаимодействие с использованием сокетов между сервером и несколькими клиентскими процессами с использованием C ++. Сервер и все клиентские процессы будут работать на одном компьютере с Windows 7. Предполагается, что std::vector данных будет храниться на сервере и передается каждому клиенту. Время от времени вектор, содержащийся на сервере, будет расширяться (push_back()) с дополнительными элементами данных и дополнительные данные необходимо будет передавать каждому клиенту. Может ли кто-нибудь предоставить ссылки на примеры того, как это сделать, соответствующие справочные материалы или простой пример «игрушечного» кода?

РЕДАКТИРОВАТЬ: После дальнейшего расследования я обнаружил, что Winsock будет подходящим. В поиске Google есть много примеров того, как настроить сервер Winsock. & расположение клиента. ОДНАКО меньше информации о том, как на самом деле передавать данные через сокеты. Может кто-нибудь рассказать о том, как синхронизировать std::vector между сервером и клиентами через сокетную связь? Каждому клиенту нужно будет указать, по какому элементу индекса он уже был передан, и сервер будет обслуживать только те элементы, которых у клиента еще не было.

1

Решение

Если вы хотите управлять протоколом выше уровня tcp / udp, попробуйте Libevent или же Boost.Asio. Если вас больше интересует просто возможность передавать сообщения, посмотрите на что-то вроде ZeroMQ или же AMQP.

Пример сервера с использованием ZeroMQ

#include <iostream>
#include <zmq.hpp>

int main(int argc, const char* argv[])
{
// create a ZeroMQ network context using 1 thread
zmq::context_t ctx(1);

// We are 'UPSTREAM' i.e. a receiver
zmq::socket_t sock(ctx, ZMQ_UPSTREAM);

sock.connect("tcp://localhost:12345");

zmq::message_t msg;
while (sock.recv(&msg)) {
std::cout << "rx: " << (const char*)msg.data() << std::endl;
}
}
2

Другие решения

Если процессы всегда будут выполняться на одном и том же сервере, вы можете использовать Boost.Interprocess вместо сокетов для обработки сообщений.

0

По вопросам рекламы [email protected]