вопросы библиотеки Quickfix - PullRequest
2 голосов
/ 31 января 2010

Я новичок в области быстрых исправлений, у меня есть несколько вопросов относительно библиотеки быстрых исправлений, и я буду более чем рад получить от вас ответы:

Я планирую разработать сервер FIX, который будет одновременно получать запрос FIX от нескольких клиентов. Что касается этого,

а) Каково точное значение TargetID (т.е. КЛИЕНТА1), если мне нужно отличить запрос от разных клиентов (как я могу отличить этот запрос друг от друга)?

б) Что вообще означает значение TargetID в отношении сервера / клиента?

в) Как добавить настраиваемые поля и настраиваемые сообщения и каково точное соединение с объектом взломщика сообщений?

С уважением,

Мордехай Якоби

1 Ответ

8 голосов
/ 09 февраля 2010
  1. TargetID - ИМЯ коробки куда вы отправляете сообщение, если вам нужно различать сессии для нескольких клиентов (я предполагаю в один сервер) просто дайте каждому клиенту разные SenderCompID.

    На вашем сервере вы должны настроить один сеанс для каждого клиента.

    Пример для одного сеанса сервер-клиент:

    На вашем сервере (INCA):

    [SESSION]
    BeginString=FIX.4.0
    SenderCompID=INCA
    TargetCompID=CLIENT1
    

    На вашем клиенте (КЛИЕНТ1):

    [SESSION]
    BeginString=FIX.4.0
    SenderCompID=CLIENT1
    TargetCompID=INCA
    

    quickfixengine различает сессию (соединение сервер-клиент) на основе эти 3 значения: (BeginString, TargetCompID, SenderCompID)

    Когда вы отправляете сообщение, вы помещаете свой идентификационный номер как sendercompid и цель, куда вы отправляете сообщение как targetcompid. Вы указываете beginstring на основе исправления версия, которую вы хотите использовать для общаться (FIX4.0 / FIX4.2 ....).

  2. Полагаю, это объяснено выше, TargetID - это идентификатор ящика, в котором вы отправка сообщений. Когда сервер отвечая клиенту, это будет установить SenderCompID как это (сервер) id и TargetCompID будут установлены в клиент, где ответ отправляется.

  3. Пользовательские поля зависят от того, что точно требуется. Протокол FIX определяет настраиваемые поля с FieldID больше чем зарезервированный диапазон, так что ваши настраиваемые поля могут начать с FieldID 5000.

    Есть несколько вариантов как это сделать. Самый простой это просто использовать числовое значение сообщения и добавить его в сообщение (я Предположим, вы используете C ++, но это похоже с другими языками).

    Что-то вроде:

     msg.setField(5000,"SomeValue");
    

    Это настраиваемое поле не будет проверяется автоматически, потому что FIX не знает об этом. FIX использует xml файлы, где каждое сообщение и поле указано.

    Существует правильная процедура для добавления новое сообщение в спецификации XML, а затем восстановить код быстрого исправления генерировать новые структуры поля, но так далеко мне не нужно было это делать.

    взломщик сообщений - это просто метод который принимает указатель на общий сообщение, а затем он смотрит на идентификатор сообщения (если я помню) и звонки соответствующий обработчик.

    Это одно большое заявление с множеством строковых операций, поэтому иногда лучше сделать проверку себя, но вы должны быть в порядке, чтобы используйте это.

    Вот как выглядит метод, вы получите идею:

    void crack( const Message& message, 
          const FIX::SessionID& sessionID )
    {
    const std::string& msgTypeValue 
             = message.getHeader().getField( FIX::FIELD::MsgType );        
    if( msgTypeValue == "0" )
      onMessage( (const Heartbeat&)message, sessionID );
    else
    if( msgTypeValue == "A" )
      onMessage( (const Logon&)message, sessionID );
    else
    if( msgTypeValue == "1" )
      onMessage( (const TestRequest&)message, sessionID );
    else
    

    Затем вы обычно реализуете соответствующий метод, как, например, если вы заботитесь только о ExecutionReport s вы внедряете в ваш код:

    virtual void onMessage( ExecutionReport&, const FIX::SessionID& );
    

    Тогда ваше приложение получит ExecutionReport так что вы можете обработайте это. Методы onMessage для сообщений, которые вы не делаете реализовать просто ничего не делать и вернуть, чтобы сообщение никогда не попадало Ваша заявка.

Если вам нужно добавить собственные сообщения / поля, которые я нашел это полезно , я не использовал его.

...