用于主从通信的IPC机制

时间:2017-03-17 10:03:08

标签: c# c ipc zeromq

我有一个要求,即主进程需要向从进程发送命令,而从进程需要确认。我试图在ZMQ中使用请求 - 响应模式,将master作为响应服务器,slave作为请求客户端。但每次奴隶需要向主人请求不可取的命令。而且我不确定该请求是否有任何到期时间。我只想在两个进程之间进行全双工通信。还有什么其他选择比这更好?

注意:我的主人是用C语言编写的,奴隶是用C#编写的。

2 个答案:

答案 0 :(得分:1)

使用具有硬连线可扩展形式通信模式行为的一个特定ZeroMQ原型
仅在两个代理端行为与原型行为匹配的情况下才有意义。

这意味着,只要有可能采用自由形式(ad-hoc)行为,就要忘记使用 import { Injectable } from '@angular/core'; import { Http, Response, Headers } from '@angular/http'; import { Observable } from 'rxjs/Rx'; import 'rxjs/add/operator/map'; import 'rxjs/add/operator/catch'; @Injectable() export class LoginService { isAuthenticated: boolean = true; constructor(private http: Http) { } login(username: string, password: string) { const headers = new Headers(); const creds = 'username=' + username + '&password=' + password; headers.append('Authorization', 'Basic ' + btoa(username + ':' + password)); headers.append('Content-Type', 'application/x-www-form-urlencoded'); return new Promise((resolve) => { this.http.post('http://localhost:8080/StudentManager/login', creds, { headers: headers }) .map( this.extractData ) .subscribe( (data) => { if(data.json().success) { window.localStorage.setItem('auth_key', data.json().token); console.log(username); this.isAuthenticated = true; } resolve(this.isAuthenticated); }); } ); } } 等。

您可以享受 REQ/REP 串联模式或 PUSH/PULL 模式,其中您的代理商不会陷入某些硬编码的消息排序或死锁在能够 PAIR/PAIR 之前等待永不回答/丢失的消息,然后向其分发对手方提供下一个消息。

是的,它会让你设计自己的消息计数,超时,服务看门狗/保持活动信号,消息重发和类似的健壮性策略,但那是面包&分布式计算中的黄油,不是吗?

  

无论如何,享受分布式计算的疯狂之旅可能对other related posts on power-usage of ZeroMQ tools ( incl. a ref. to an excellent book from Pieter HINTJENS - "Code Connected, Vol. 1" --- a must read ...

感兴趣

答案 1 :(得分:0)

鉴于主服务器必须能够向特定从服务器发送消息,我推荐这种方法。主服务器将绑定一个ROUTER套接字。每个从站将使用一个DEALER插座连接到主ROUTER。 (所以奴隶必须知道主人的地址和ROUTER端口。)

连接后,每个从站都会向主站发送一些“hello”消息,让主站知道它是什么类型的从站(或者它可以执行什么类型的任务)。现在,当奴隶上线时,主人会知道他们是什么类型,并且能够向他们发送消息。

这是一个相当先进的ZeroMQ配置。在您尝试此操作之前,我建议您使用ROUTER和DEALER套接字对编写一个非常基本的主/从应用程序。你应该至少阅读the guide的第1-3章。至少您必须了解how ROUTER sockets work