Передача сообщений между двумя машинами в сети

Описание проблемы: В сети работают два процесса на двух разных Unix-машинах. Как проще всего передать простое сообщение, например «Привет !!», с одного компьютера на другой? Я знаю, что есть много методов IPC, но какой самый простой с минимальными издержками?

Полезен ли Boost MPI в моем сценарии? Я использую C ++ для моей реализации.

0

Решение

Розетки. Вот такие розетки руководство. После того, как вы повесили розетки, вы также можете использовать розетки

2

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

Используйте розетки (я бы посоветовал увеличить розетки) или взглянуть на ZeroMQ. ZeroMQ на самом деле может быть проще, так как он гарантирует всегда получать полное сообщение.

1

Это достаточно просто? (использование стандартных вызовов MPI без сторонних библиотек, таких как Boost.MPI)

#include <string>
#include <iostream>
#include <mpi.h>

using namespace std;

int main (int argc, char **argv) {
// Initialise the MPI library
MPI_Init(&argc, &argv);

int rank, size;
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);

if (size != 2) {
if (rank == 0)
cout << "ERROR: You must run this program with 2 processes" << endl;
MPI_Abort(MPI_COMM_WORLD, 0);
}

if (rank == 0) {
// Rank 0 sends the message
string hi = "Hi!";
MPI_Send((void*)hi.c_str(), hi.length()+1, MPI_CHAR,
1, 0, MPI_COMM_WORLD);
}
else {
// Rank 1 receives the message
// Probe for a message and get its actual size
MPI_Status status;
MPI_Probe(0, 0, MPI_COMM_WORLD, &status);
int len;
MPI_Get_count(&status, MPI_CHAR, &len);
// Allocate buffer space for the message and receive it
char *message = new char[len];
MPI_Recv(message, len, MPI_CHAR,
0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
cout << "Rank 1 received: " << message << endl;
delete [] message;
}

MPI_Finalize();

return 0;
}

Компилировать с mpic++ -o mpihi.exe mpihi.cc и выполнить:

$ mpiexec -np 2 ./mpihi.exe
Rank 1 received: Hi!

Код может быть упрощен, если длина сообщения фиксирована заранее. Можно было бы еще больше упростить его, используя Boost.MPI но я никогда не использовал его, поэтому не могу привести пример.

Приятной особенностью MPI является его гарантированная доставка сообщений и то, как он абстрагирует специфику межсоединения. Вы можете изменить размещение двух процессов MPI, предоставив соответствующие параметры для mpiexec, Если оба процесса размещены на одном физическом узле, для передачи сообщения будет использоваться общая память. Если разместить на разных узлах, какой-то сетевой механизм привыкнет.

Конечно, все зависит от ваших потребностей. Библиотеки MPI представляют собой сложные фрагменты кода с множеством вспомогательных инфраструктур, например, вам нужно запустить свой код через специальную программу запуска (в большинстве случаев mpiexec или же mpirun) и вы не можете использовать MPI для простого соединения двух случайных процессов (т.е. вы действительно иметь запустить их обоих через mpiexec/mpirun).

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