2

ローカル ネットワークでの分散コンピューティングの PUSH/PULL パターンを試しています。今まではすべてうまくいっているように見えましたが、31 ワーカー (サーバー) の起動時にクライアント (人工呼吸器とコレクター) アプリケーションがクラッシュすることを発見しました。

Windows の特定のポートへの接続に制限はありますか (MacOs X ではそうではないようです)。zeromq の例のように、tcp トランスポートとポート 5555 および 5556 を使用しています。この動作は、リモート ワーカーとローカル ワーカーのオブザーバーです。

どうも

更新: コードはこちら (zmq ガイドから変更されたサンプル)

#include <zmq.hpp>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <iostream>
#include <sstream>

int main (int argc, char *argv[])
{
    zmq::context_t context(1);

    int number_of_sockets=32;       // 32 will crash, 30 will pass

    zmq::socket_t** receiver=new zmq::socket_t*[number_of_sockets];
    zmq::socket_t** sender=new zmq::socket_t*[number_of_sockets];

    std::cout<< "go"<<std::endl;
    for (int i=0;i<number_of_sockets; i++)
    {
        receiver[i]=new zmq::socket_t(context, ZMQ_PULL);
        receiver[i]->connect("tcp://localhost:5555");
    }

    std::cout<< "ok"<<std::endl;

    for (int i=0;i<number_of_sockets; i++)
    {
        sender[i]=new zmq::socket_t(context, ZMQ_PUSH);
        sender[i]->connect("tcp://localhost:5556");
    }   

    std::cout << "done" <<std::endl;

    return 0;
}    

次のコマンドで Mingw-w64-tdm (4.5) を使用してビルドします。 g++ -o worker.exe taskworker.cpp -L/./lib -lzmq -L/./lib/zeromq/libzmq.la -liphlpapi -lrpcrt4 -lws2_32 -lpthread

4

1 に答える 1

2

Ok。ここでこの問題に固定しました。問題は、Windows ではデフォルトで FD_SETSIZE の制限が 64 であることです (これによりコードがクラッシュします - 実際には 32. ワーカーの場合)。FD_SETSIZE は、0mq の構築中に変更できます (CPPFLAG="-DFD_SETSIZE=1024")。これでクラッシュはなくなりました。

于 2013-06-20T19:34:26.237 に答える