< 라우터 설정이 NetMQ v4입니다. 여기서 아무 문제없이 모든 방향으로 비동기식으로 메시지를 보내고받을 수 있습니다. 서버 (라우터가) 들어오는 메시지를 수신 곳ZeroMQ 또는 NetMQ의 라우터 소켓에서 송수신하는 방법은 무엇입니까?
는 지금 추상화에 그것을 공식화 할뿐만 아니라 연결된 클라이언트 (딜러) 중 하나에 수요 방송 메시지에 대한 필요가있다.
구독자가 서버에 메시지를 보내야하므로 펍 < -> 하위 소켓을 사용하지 않는 것이 좋습니다. 달성하고자하는 가장 가까운 패턴은 WebSocket 클라이언트 - 서버 통신입니다.
클라이언트의 메시지를 듣고의 첫 번째 부분은 같은에서 수행됩니다
이제 소켓 - 안전 스레드되지 않습니다, 나는 (메시지를 방송 할 수있는 방법을 찾는 데에서 오는에 부착하고 주어진using (var server = new RouterSocket("@tcp://*:80"))
{
var addresses = new HashSet<string>();
while (true)
{
var msg = server.ReceiveMultipartMessage();
var address = Encoding.UTF8.GetString(msg[0].Buffer);
var payload = Encoding.UTF8.GetString(msg[2].Buffer);
Console.WriteLine("[Server] - Client: {0} Says: {1}", address, payload);
var contains = addresses.Contains(address);
if (!contains) { addresses.Add(address); }
msg.Clear();
msg.Append(address);
msg.AppendEmptyFrame();
msg.Append("Reply for: " + address);
server.SendMultipartMessage(msg);
}
}
요구에 따라 다른 스레드)를 모든 클라이언트에 제공합니다.
루프에서 메서드를 대신 사용할 수 있습니다. 설정 시간 초과로 인해 브로드 캐스트 메시지의 큐를 확인한 다음 해당 메시지를 보내는 각 클라이언트를 반복 할 수 있습니다. 같은 뭔가 : 어떻게 든
using (var server = new RouterSocket("@tcp://*:80"))
{
var addresses = new HashSet<string>();
var msg = new NetMQMessage();
while (true)
{
var clientHasMsg = server.TryReceiveMultipartMessage(TimeSpan.FromSeconds(1), ref msg);
if (!clientHasMsg)
{
// Check any incoming broacast then loop through all the clients
// sending each the brodcast msg
var broadMsg = new NetMQMessage();
foreach (var item in addresses)
{
broadMsg.Append(item);
broadMsg.AppendEmptyFrame();
broadMsg.Append("This is a broadcast");
server.SendMultipartMessage(broadMsg);
broadMsg.Clear();
}
// Go back into the loop waiting for client messages
continue;
}
var address = Encoding.UTF8.GetString(msg[0].Buffer);
var payload = Encoding.UTF8.GetString(msg[2].Buffer);
Console.WriteLine("[Server] - Client: {0} Says: {1}", address, payload);
var contains = addresses.Contains(address);
if (!contains) { addresses.Add(address); }
msg.Clear();
msg.Append(address);
msg.AppendEmptyFrame();
msg.Append("Reply for: " + address);
server.SendMultipartMessage(msg);
}
}
이 바로 주로 인해 생각하지 않습니다
- 좋은 값은 시간 제한에 대한 어떤 가치인가? 1 초, 100 ms 등;
- 이 프로그램은 초당 수천 개의 메시지를 보내는 데 100k + 클라이언트를 연결하는 데 사용되므로 가장 효율적이며 성능이 우수한 솔루션입니까?
가장 좋은 방법은 무엇입니까?
'Device'에서 블로그를 읽었을 때'Queue'를 언급하기 전까지는 좋은 선택이 될 것이라고 생각했습니다 :-) http : //netmq.readthedocs의 몇몇 행을 제외하고 어딘가에 예제가 있습니까? io)? – MaYaN
그래, 추가 예제없이이 작업을 할 수 있다고 생각 하나, NetMQQueue과 NetMQSscheduler의 차이점은 무엇입니까? v4에서 스케줄러가 쓸모 없습니까? –
MaYaN
NetMQScheduler는 더 이상 사용되지 않으며 (NetMQPoller의 일부 임), 어쨌든 NetMQScheduler는 작업 대기열이며, NetMQQueue는 모든 유형의 대기열입니다. – somdoron