ルーター アプリケーションの初期化時に、次のコードを呼び出します。正常にバインドし、正常にメッセージを受信しますが、直接応答でない限り、On_ReceiveXXX メソッドの動作を拒否します。理由を知りたい
public void Initialize(string frontEndAddress, string backEndAddress)
{
_poller = new Poller();
_timeAllowedBetweenPings = TimeSpan.FromMinutes(1);
_lastPingResponse = DateTime.Now;
using (var ctx = NetMQContext.Create())
{
_frontEnd = ctx.CreateRouterSocket();
_backEnd = ctx.CreateRouterSocket();
_frontEnd.Bind(frontEndAddress);
Console.WriteLine(string.Format("[Router]: Connected to {0}", frontEndAddress));
_backEnd.Bind(backEndAddress);
Console.WriteLine(string.Format("[Router]: Connected to {0}", backEndAddress));
_frontEnd.ReceiveReady += On_ReceiveFrontEnd;
_backEnd.ReceiveReady += On_ReceiveBackEnd;
_poller.AddSocket(_frontEnd);
_poller.AddSocket(_backEnd);
var timer = new NetMQTimer(TimeSpan.FromSeconds(1));
timer.Elapsed += On_Ping;
_poller.AddTimer(timer);
_poller.PollTillCancelled();
}
}
これは、ディーラーの ReceiveReady イベントの呼び出しに失敗します。
private void On_ReceiveFrontEnd(オブジェクト送信者, NetMQSocketEventArgs e) { _lastPingResponse = DateTime.Now; var frontEndMsg = e.Socket.ReceiveMultipartBytes(); var streamData = frontEndMsg.Last(); ApplicationMessage msg = PackageHelper.DeserializeOutgoing(streamData); Console.WriteLine(string.Format("受信したコマンド: {0}", msg.CO));
_backEnd.SendMultipartBytes(frontEndMsg);
}
しかし、行を変更すると
_backEnd.SendMultipartBytes(frontEndMsg);
に
_frontEnd.SendMultipartBytes(frontEndMsg);
それは突然機能します...したがって、フロントエンドアプリケーションからのメッセージは応答することしかできず、バックエンドアプリケーションには渡されません。バックエンド メッセージについては、逆の場合も同様です。