Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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
Ios 如何以最短的迭代时间和更快的速度将联系人与服务器联系人同步?_Ios_Database_Web Services_Synchronization_Contacts - Fatal编程技术网

Ios 如何以最短的迭代时间和更快的速度将联系人与服务器联系人同步?

Ios 如何以最短的迭代时间和更快的速度将联系人与服务器联系人同步?,ios,database,web-services,synchronization,contacts,Ios,Database,Web Services,Synchronization,Contacts,我创建了一个与WhatsApp相同的应用程序,与同一行业的人聊天,我的基本概念是同步用户联系,并找到使用此应用程序的用户,用户可以彼此聊天 联系人同步我已经在我的应用程序和它的工作良好,直到100至500个联系人,但如果任何用户在他的联系人簿中有2000至3000个联系人,它需要时间与服务器同步 ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, nil); NSArray *allContacts = (

我创建了一个与
WhatsApp
相同的应用程序,与同一行业的人聊天,我的基本概念是同步用户联系,并找到使用此应用程序的用户,用户可以彼此聊天

联系人同步我已经在我的应用程序和它的工作良好,直到100至500个联系人,但如果任何用户在他的联系人簿中有2000至3000个联系人,它需要时间与服务器同步

ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, nil);
NSArray *allContacts = (__bridge NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBookRef);
NSMutableArray *contacListAddIntoDatabase = [NSMutableArray new];

for (id record in allContacts) {
    ABRecordRef thisContact = (__bridge ABRecordRef)record;
    //save Contact in DataBase.
}
我正在使用下面的代码获取用户联系人并将其发送到服务器

ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, nil);
NSArray *allContacts = (__bridge NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBookRef);
NSMutableArray *contacListAddIntoDatabase = [NSMutableArray new];

for (id record in allContacts) {
    ABRecordRef thisContact = (__bridge ABRecordRef)record;
    //save Contact in DataBase.
}
在本地
数据库中保存所有记录后,我将该记录发送到服务器,以检查该联系人是否是我的应用程序用户,并获取正在使用我的应用程序的用户的列表。我已经在contactsync服务中实现了分页功能

以下是我的联系人同步到服务器的代码:

if ([[APP_DELEGATE contactArrayForSync] count] > 0) {
    int long pageSize = ([[APP_DELEGATE contactArrayForSync] count] > CONTACT_SYNC_PAGE_SIZE ) ? CONTACT_SYNC_PAGE_SIZE : [[APP_DELEGATE contactArrayForSync] count];
    NSError *error;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:contactList
                                            options:0
                                            error:&error];
    NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    [[APP_DELEGATE apiManager] syncUserContacts:[APP_DELEGATE getEncryptedUserID] andJSONString:jsonString withCallback:^(BOOL success, id responseObject) {
        //Update DataBase as per server response
    }];
}
要同步2000个联系人,同步大约需要2分钟,同步联系人的时间非常长

我想减少这段时间,所以有没有办法在分拣机时间内获得同步数据

我被困在这里,客户要求更快的解决方案来同步我的联系人

注意:在服务器中,我的联系人表中有大约50000条记录,将来可能会增加

如有任何建议,将不胜感激

更新:第一次我将所有联系人发送到分页服务器,这很好,但在第一次同步后,每秒钟同步一次,我只需要发送更新或新添加的记录。现在,我每次都将所有记录发送到服务器


那么,我如何才能获得更新的记录或新添加的记录以及更快的下次同步速度呢?

我认为您可以通过更改代码的一些实现以及服务器端代码来加快同步速度。您将所有电话号码发送到字典数组中(名称,所有电话号码以逗号分隔)。您需要在从通讯簿获取记录时创建此结构,现在在服务器端相应地更改您的逻辑。存储在数据库中的任务和同步都可以在不同的线程上完成


希望这对你有帮助

您已要求我们帮助您加快保存/同步代码的速度,但您也没有向我们展示。请发布相关代码Hey@SimonMcLoughlin我已经用服务器代码更新了我的问题,也请检查一下。Bhupesh,我已经用字典数组发送了所有电话号码,并从服务器获得了优化响应。有没有其他方法可以更快地同步我的联系人?但如何为单个用户获取多个号码??这是我们可以优化代码的地方。不,亲爱的,我只想要一个保存的联系人号码,这不是我同步需要时间的地方。我真正的问题是,当用户想再次更新与他更新的联系人的同步时,它需要与第一次同步相同的时间,因此我想减少更新联系人同步。在发送到服务器时,您能否压缩数据,如g-zip等?也许通过这种方式你们可以做到。g-zip算法已经在服务器端实现了,因为响应非常小,所以可能不会对进程产生太大影响!