У меня есть сервер, которому нужно получить инструкции для запуска процессов для клиентов на другом компьютере.
Клиенты отправляют сообщение о работе, Сервер обрабатывает работу, а затем отправляет обратные результаты.
Я пытался использовать шаблон запроса-ответа NetMQ (см. Ниже)
Это хорошо работает для 1 клиента, НО, если второй клиент отправляет запрос до завершения предыдущей работы клиента - я получаю сообщение об ошибке.
Мне действительно нужно иметь возможность получать специальные сообщения от клиентов и отправлять результаты после их завершения. Понятно, что я использую неправильный шаблон, но чтение документов ZeroMQ не выявило более подходящего.
namespace Utils.ServerMQ
{
class ServerMQ
{
public static void Go()
{
using (var responseSocket = new ResponseSocket("@tcp://*:393"))
{
while (true)
{
Console.WriteLine("Server waiting");
var message = responseSocket.ReceiveFrameString();
Console.WriteLine("Server Received '{0}'", message);
//System.Threading.Thread.Sleep(1000);
var t2 = Task.Factory.StartNew(() =>
{
RunProcMatrix(message, responseSocket);
});
}
}
}
public static void RunProcMatrix(object state, ResponseSocket responseSocket)
{
var process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = Path.Combine(@"H:\Projects\Matrix\Matrix\bin\Debug\", "Matrix001.exe"),
Arguments = (string)state,
WindowStyle = ProcessWindowStyle.Normal,
CreateNoWindow = false
}
};
process.Start();
process.WaitForExit();
responseSocket.SendFrame((string)state);
}
}
}