1
Vývoj / ZeroMQ - asynchronní klient
« kdy: 07. 10. 2020, 11:59:33 »
Ahoj, snažím se porozumět NetMQ (potažmo zeromq), ale nějak mi to pořád nejde.
Mám server, který přijímá zprávy z N klientů a vrací jim odpovědi (ten mi snad funguje), ale potřebuji udělat klienta, který dokáže odesílat zprávy asynchronně. Příklad: v hlavním vlákně se připojím na server. Vytvořím Task, který během své existence čile komunikuje se serverem. Následně vytvořím další Tasky a počkám si na jejich dokončení. Na serveru používám pro propojení soketu s vnějškem a inproc soketů objekt Proxy. Ten ale blokuje hlavní vlákno. Dá se to nějak vyřešit asynchronně?
Ukázka kódu na klientovi:
Mám server, který přijímá zprávy z N klientů a vrací jim odpovědi (ten mi snad funguje), ale potřebuji udělat klienta, který dokáže odesílat zprávy asynchronně. Příklad: v hlavním vlákně se připojím na server. Vytvořím Task, který během své existence čile komunikuje se serverem. Následně vytvořím další Tasky a počkám si na jejich dokončení. Na serveru používám pro propojení soketu s vnějškem a inproc soketů objekt Proxy. Ten ale blokuje hlavní vlákno. Dá se to nějak vyřešit asynchronně?
Ukázka kódu na klientovi:
Kód: [Vybrat]
using var frontend = new DealerSocket();
using var backend = new RouterSocket();
frontend.Connect("tcp://127.0.0.1:5555");
backend.Bind("inproc://workers2");
var queue = new List<Task>();
for (int i = 0; i < 1; ++i)
{
int id = i;
var task = Task.Run(() =>
{
Worker(id);
});
queue.Add(task);
}
//var proxy = new Proxy(frontend, backend);
//proxy.Start();
//??
Task.WaitAll(queue.ToArray());