Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets netmq(zeromq)中推/拉套接字的意外行为_Sockets_Zeromq_Netmq - Fatal编程技术网

Sockets netmq(zeromq)中推/拉套接字的意外行为

Sockets netmq(zeromq)中推/拉套接字的意外行为,sockets,zeromq,netmq,Sockets,Zeromq,Netmq,我正在尝试使用netmq(zeroMQ的端口)。这是我发现的问题。下面是一个代码: class Program { private static NetMQContext context; static void Main(string[] args) { context = NetMQContext.Create(); using (var puller = context.CreatePullSocket()) {

我正在尝试使用netmq(zeroMQ的端口)。这是我发现的问题。下面是一个代码:

class Program
{
    private static NetMQContext context;

    static void Main(string[] args)
    {
        context = NetMQContext.Create();
        using (var puller = context.CreatePullSocket())
        {
            puller.Bind("tcp://127.0.0.1:5651");
            Thread.Sleep(500);
            for (int i = 0; i < 5; i++)
            {
                Task.Run(new Action(PusheThread));
            }
            Console.WriteLine("any key to start receive");
            Console.ReadKey();
            Msg msg = new Msg();
            msg.InitEmpty();
            for (; puller.TryReceive(ref msg, new TimeSpan(0, 0, 5)); msg = new Msg(), msg.InitEmpty())
            {
                var s = Encoding.UTF8.GetString(msg.Data);
                Console.WriteLine(s);
            }
        }
        Console.WriteLine("any");
        Console.ReadKey();
    }

    static void PusheThread()
    {
        var guid = Guid.NewGuid();
        Console.WriteLine("started: " + guid);
        using (var pusher = context.CreatePushSocket())
        {
            pusher.Connect("tcp://127.0.0.1:5651");
            for (int i = 0; i < 5; i++)
            {
                pusher.Send("helo! " + guid);
            }
        }
    }
}
正如我们看到的,这里没有来自
4211d77a-ad9f-40f1-9382-121156325128
bd735e75-2692-4abe-b8b1-fbddbe21e546
和其他一些人的消息。
是多线程的问题吗?还是我做错了什么?谢谢。

问题出在
PusheThread
中,您只需将新创建的
PushSocket
快速终止即可

static void PusheThread()
{
    var guid = Guid.NewGuid();
    Console.WriteLine("started: " + guid);
    using (var pusher = context.CreatePushSocket())
    {
        pusher.Connect("tcp://127.0.0.1:5651");
        for (int i = 0; i < 5; i++)
        {
            pusher.Send("helo! " + guid);
        }
        Thread.Sleep(5000);
    }
}
static void PusheThread()
{
var guid=guid.NewGuid();
Console.WriteLine(“已启动:+guid”);
使用(var pusher=context.CreatePushSocket())
{
连接tcp://127.0.0.1:5651");
对于(int i=0;i<5;i++)
{
发送(“helo!”+guid);
}
睡眠(5000);
}
}
尽管这不是一个可靠的解决方案,但应该证明问题在于
PushSocket
在能够发送消息之前由
using
语句处理


一些消息甚至显示了NetMQ和ZeroMQ的速度:)

问题在于
PusheThread
中,您可以简单地将新创建的
PushSocket
终止为fast

static void PusheThread()
{
    var guid = Guid.NewGuid();
    Console.WriteLine("started: " + guid);
    using (var pusher = context.CreatePushSocket())
    {
        pusher.Connect("tcp://127.0.0.1:5651");
        for (int i = 0; i < 5; i++)
        {
            pusher.Send("helo! " + guid);
        }
        Thread.Sleep(5000);
    }
}
static void PusheThread()
{
var guid=guid.NewGuid();
Console.WriteLine(“已启动:+guid”);
使用(var pusher=context.CreatePushSocket())
{
连接tcp://127.0.0.1:5651");
对于(int i=0;i<5;i++)
{
发送(“helo!”+guid);
}
睡眠(5000);
}
}
尽管这不是一个可靠的解决方案,但应该证明问题在于
PushSocket
在能够发送消息之前由
using
语句处理


有些消息甚至显示了NetMQ和ZeroMQ的速度:)

检查连接和发送推送线程时是否有错误,看看是否有什么弹出。我发现这个问题只存在于
NetMQ
中。如果我使用本机
zeromq
.net wrapper all works,请仔细检查连接推送线程和发送推送线程时是否出现错误,查看是否出现任何问题。我发现此问题仅存在于
netmq
中。如果我使用本机
zeromq
.net wrapper all works,请仔细检查连接推送线程和发送推送线程时是否出现错误,查看是否出现任何问题。我发现此问题仅存在于
netmq
中。如果我使用本机
zeromq
.net包装器,一切都可以正常工作