Что лучшая архитектура должна соединить мостом к XMPP? [закрытый]

Это версия Objective C о том, как сохранить изображение в Cloudkit

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

  if([results count] <= 0) {



            NSLog(@"this Record doesnt exist so add it ok!! %@", error);

            CKRecordID *wellKnownID = [[CKRecordID alloc]
                                       initWithRecordName:idString];


            CKRecord *entitiesName = [[CKRecord alloc] initWithRecordType:@"mySavedDetails"
                                                             recordID:wellKnownID];


            [entitiesName setObject:idString
                         forKey:@"myDetailsId"];

            [entitiesName setObject:self.myName.text
                         forKey:@"myName"];



    if (myUIImage.image != nil)
                 {
                     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                                          NSUserDomainMask, YES);
                     NSString *documentsDirectory = [paths objectAtIndex:0];
                     NSString* path = [documentsDirectory stringByAppendingPathComponent:
                                       @"test.png" ];
                     NSData* data = UIImagePNGRepresentation(myUIImage.image.image);
                     [data writeToFile:path atomically:YES];

    //so we get the full path of the uiimage

                     NSLog(@"Path details %@",path);


                     NSURL* myImagePath = nil;
                     myImagePath =
                     [[NSBundle mainBundle] URLForResource:path
                                             withExtension:@"png"];



 //here we change the path of Image which is a string to a URL
                     NSURL *yourURL = [NSURL fileURLWithPath:path];

                     CKAsset* myImageAsset = nil;
                     myImageAsset =
                     [[CKAsset alloc] initWithFileURL:yourURL];




                [entitiesName setObject: myImageAsset
                              forKey:@"myImage"];




                [publicDatabase saveRecord: entitiesName
                          completionHandler:^(CKRecord *savedState, NSError *error) {
                              if (error) {
                                  NSLog(@"ERROR SAVING: %@", error);
                              }


                          }];



                 }




            }
9
задан Chilledrat 2 May 2012 в 17:39
поделиться

4 ответа

Протокол шлюза XMPP, о котором Вы услышали, скорее всего, относится к транспортам. Транспорт является сервером, который соединяется и с сервером XMPP и с non-XMPP сервером. Путем выполнения транспорта я могу использовать свой клиент Бессмысленных данных, чтобы говорить с кем-то использующим, скажем, MSN Messenger.

Транспорт обычно соединяется однажды с удаленной сетью для каждого JID, который это видит как онлайн. Таким образом, это - Ваша опция 2 наоборот. Это вызвано тем, что нет никаких особых отношений между транспортом и non-XMPP сетью; транспорт просто действует как набор постоянных клиентов. Чтобы это работало, клиенты XMPP должны сначала зарегистрироваться в транспорте, дав данные для входа в систему для удаленной сети, и позволив транспорту просмотреть их присутствие.

Единственная причина это имеет шанс масштабирования лучше, состоит в том, что может быть много транспортов для той же удаленной сети. Например, мой сервер Бессмысленных данных мог выполнить транспорт к MSN, другой сервер Бессмысленных данных мог выполнить другой, и так далее, каждое обеспечение соединения для различного подмножества пользователей XMPP. В то время как это распространяет нагрузку на сторону Бессмысленных данных, и выравнивание нагрузки в Вашей системе может распространить загрузку также, все еще требуется много соединений между этими двумя системами.

В Вашем случае, потому что (я принимаю) сотрудничает non-XMPP сторона вещей, помещение интерфейса сервера XMPP на non-XMPP сервере вероятно Ваш лучший выбор. Тот интерфейс сервера подходит лучше всего для управления отображением между XMPP JIDs и как это JID появится в его собственной сети, вместо того, чтобы вынудить пользователей XMPP зарегистрироваться и так далее.

В случае, если Вы не видели их, Вы могли бы найти их полезными:

Надежда, которая помогает.

4
ответ дан 4 December 2019 в 21:13
поделиться

Я также работаю над аналогичной системой.

Я иду со шлюзом/компонентным маршрутом. Я посмотрел на несколько опций и уладил споры с этим.

Шлюз является в основном компонентом с определенной целью соединить Jabber/XMPP мостом с другой сетью. Необходимо будет создать большинство вещей, которые Вы считаете само собой разумеющимся при использовании XMPP в качестве клиента. Материал как управление списком.

Существует очень мало справки онлайн на фактическом дизайне и здании компонента. Как вышеупомянутый ответ я нашел что xmpp протоколы/расширения помогать. Основное быть:

Прочтение их покажет Вам, какой XEPs Вы, как будут ожидать, сможете обработать. Проигнорируйте материал, который будет обработан сервером, к которому Ваш компонент будет attched.

Это - позор, что Djabberd имеет такую плохую документацию, поскольку их система "всего является модулем", дал возможность бэкенда сервера, мог взаимодействовать через интерфейс непосредственно к другой сети. Я не сделал прогресса на этом.

2
ответ дан 4 December 2019 в 21:13
поделиться

Еще один подход должен работать с Вашим поставщиком сервера XMPP. Большинство имеет внутренние API, которые делают присутствие введения возможным из приложений сторонних производителей. Например, Бессмысленные данные, которые XCP обеспечивает API для этого, это действительно просто в использовании.

(Раскрытие: Я работаю на Jabber, Inc, компанию позади Jabber XCP),

0
ответ дан 4 December 2019 в 21:13
поделиться

Существует два основных типа соединений сервер-сервер (s2s). Первый называется шлюзом или транспортом, но это одно и то же. Вероятно, это именно то, что вам нужно. Мне не удалось найти конкретную документацию для стороны, отличной от XMPP, но то, как XMPP думает о переводе на устаревшие серверы, можно найти на http://xmpp.org/extensions/xep-0100.html . Второй тип на самом деле не объясняется ни в каких дополнительных XEP - это обычные соединения XMPP s2s. Ищите «Связь между серверами» в RFC 3920 или RFC 3920bis для получения последнего чернового обновления.

Поскольку у вас есть собственные пользователи и присутствие на вашем сервере, и это не XMPP, концепции не будут отображаться полностью к модели XMPP. Вот тут-то и вступает в дело работа транспорта. Вам необходимо выполнить перевод вашей модели в модель XMPP. Хотя это некоторая работа, все решения должны принимать вы.

Это подводит нас прямо к одному из ключевых вариантов дизайна - вам действительно нужно решить, какие вещи вы собираетесь отображать в XMPP из своего сервиса, а какие нет. Эти описания функций и вариантов использования определяют общую структуру. Например, это как транспорт для общения со службами чата AOL или MSN? Затем вам понадобится способ сопоставить их эквивалент реестров, присутствия и хранения информации о сеансах вместе с логинами и паролями от ваших локальных пользователей на удаленный сервер. Это связано с тем, что ваш транспорт должен будет притвориться этими пользователями и должен будет войти в систему для них.

Или, может быть, вы просто мост s2s к чужой шахматной игре на основе XMPP, поэтому вы не Мне не нужен логин на удаленном сервере, и он может действовать аналогично почтовому серверу и передавать информацию туда и обратно. (При обычных соединениях s2s единственной сессией, которая будет сохранена, будет аутентификация SASL, используемая с удаленным сервером, но на уровне пользователя s2s просто поддерживает соединение, а не сеанс входа в систему.)

Другими факторами являются масштабируемость и модульность на твой конец. Вы решили некоторые проблемы масштабируемости. Взгляните на установку нескольких транспортов для балансировки нагрузки. Для модульности посмотрите, где вы хотите принимать решения о том, что делать с каждым пакетом или действием. Например, как вы обрабатываете и отслеживаете данные подписки? Вы можете положить его на свой транспорт, но тогда использование нескольких транспортных средств станет сложнее. Или, если вы примете это решение ближе к своему главному серверу, вы можете иметь более простые транспорты и использовать некоторый общий код, если вам нужно поговорить с другими службами, кроме XMPP. Компромисс - более сложный главный сервер с большим потенциалом уязвимости.

2
ответ дан 4 December 2019 в 21:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: