我有一个要求,即主进程需要向从进程发送命令,而从进程需要确认。我试图在ZMQ中使用请求 - 响应模式,将master作为响应服务器,slave作为请求客户端。但每次奴隶需要向主人请求不可取的命令。而且我不确定该请求是否有任何到期时间。我只想在两个进程之间进行全双工通信。还有什么其他选择比这更好?
注意:我的主人是用C语言编写的,奴隶是用C#编写的。
答案 0 :(得分:1)
这意味着,只要有可能采用自由形式(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