Mobil uygulama için hangi sunucunun kullanılacağı. Mobil istemci sunucu geliştirme

Mobil uygulama için hangi sunucunun kullanılacağı.  Mobil istemci sunucu geliştirme
Mobil uygulama için hangi sunucunun kullanılacağı. Mobil istemci sunucu geliştirme

488 Bölüm IV. Örneklerde Ajax

botlar ve gönderilen sorgu dizesi değerine dayalı olarak yanıt verilerini dinamik olarak oluşturacak olan sunucuyu çağırır. LoaciXMLXSLTDoc() işlevinin ilk parametresi, HTML Form O alan değerlerine göre oluşturulan bir sorgu dizesiyle birleştirilmiş, XML belgesini oluşturan PHP sayfasının URL'sidir.İkinci parametre, kullanılan © XSLT dosyasının adıdır. XML veri dönüşümünde. LoadXMLXSLTDoc() işlevinin gerektirdiği üçüncü parametre, arama sonuçlarının yerleştirileceği div öğesinin kimliğidir. Tanımlayıcı, bir nesne başvurusu değil, çıktı öğesinin dize adıdır; bu durumda tanımlayıcı olarak "sonuçlar" dizesi kullanılır.

Bir sonraki adımda, Web sayfasına bir gösterge resmi eklemek için DOM yöntemlerini kullanıyoruz. Bir görüntü öğesi © oluşturulur ve görüntü kaynağı özniteliği O olarak ayarlanır. Bu oluşturulan öğe, sonuç div öğesine © eklenir. Böylece, formun gönderme olay işleyicisinden fonksiyonumuz çağrıldığında, sayfaya bir resim dosyası yerleştirilir. Genel olarak, kullanıcının görsel oluşturması önemlidir. geri bildirim- bir mesaj veya resim, - işlemenin devam ettiğini gösterir. Bu, kullanıcının hiçbir şey olmadığını düşünerek handikap gönder düğmesine tekrar tekrar tıklamasını engeller (unutmayın, Ajax işlemi "görünmezdir").

Son adım, sunucuya bilgi gönderme sürecini başlatan LoadXMLXSLTDoc () ® işlevini çağırmaktır. Bölüm 12.4'te açıklanan LoadXMLXSLTDoc() işlevi, sunucudan belge isteyen ContentLoader() nesnesine yapılan çağrıyı işler. Çıkış konumunu bir parametre olarak ayarlayarak (değeri LoadXMLXSLTDoc() işlevinde sabit kodlamak yerine), yeniden kullanabiliriz bu fonksiyon ayırma gerektirmeden tek sayfada işlevsellik birden fazla prosedür veya if ifadesi eklemek. Bu nedenle, çeşitli sonuçları yeniden yönlendiriyoruz arama sorguları sayfanın farklı bölümlerine. Ancak, tüm bunları yapmadan önce, sunucuda XML ve XSLT belgelerinin nasıl oluşturulacağına bakalım.

12.3. Uygulama arka uç kodu: PHP

İÇİNDE Bu bölümde bir dinamik oluşturacağız. Popüler bir açık kaynak betik dili olan PHP kullanan XML belgesi kaynak kodu(bildiğiniz gibi, Ajax çerçevesi herhangi bir sunucu tarafı dili veya platformuyla uyumludur). XML belgesi, veritabanına karşı bir müşteri sorgusuna yanıt olarak alınan sonuç kümesinden dinamik olarak oluşturulur. Ek olarak, sunucuda bulunan ve her dinamik dosya istendiğinde alınan statik bir XSLT belgesini nasıl oluşturacağınızı göstereceğiz. Bu belgelerin her ikisi de, ContentLoader nesnesi iki ayrı istekte istendiğinde (Liste 12-7) istemciye bağımsız olarak döndürülür. XSLT, dinamik XML belgemizi istemci tarafında dönüştürür ve kullanıcıya görüntülenen bir HTML tablosu oluşturur.

Bölüm 12 XSLT 489 Kullanarak Canlı Arama

12.3.1. XML Belgesi Oluşturma

XSLT kullandığımız için, yapılandırılmış bir XML belgesine ihtiyacımız var. basit gösterim XSL dosyasının standart dönüşümü gerçekleştirebilmesi için bilgi. İÇİNDE bu projeİstemci bir PHP dosyası istediğinde dinamik bir XML dosyası oluşturacağız.

XML yapı geliştirme

XML dosyasını oluşturmaya başlamadan önce bunun için bir şablon oluşturmamız gerekiyor. Bu kalıp, arama tarafından döndürülen verilerin yapısını yansıtmalıdır. Seçilen görev bildiriminde (telefon rehberi), şirket adını, ilgili kişinin adını, ülkeyi ve telefon numarası. Liste 12-3, dört alan içeren temel bir XML şablonunu gösterir.

Listeleme 12.3. Temel XML Dosyası

Firma Adı kişi adı ülke adı telefon numarası

İlk öğe telefon defteridir. Sırada, hepsiyle ilgili tüm ayrıntıları içeren alt öğeleri içeren bir giriş öğesi var. iletişim numaraları istekte bulundu. Beş sonucumuz varsa, XML belgesinde beş giriş öğesi olacaktır. Şirketin adı şirket öğesinde görüntülenir. Ayrıca muhatap kişinin adını, ülke adını ve telefon numarasını da ekledik. Belirtilen alanlarla sınırlı değiliz; Hangi bilgileri görüntülemek istediğinize bağlı olarak alanlar eklenebilir veya kaldırılabilir.

Herhangi bir sonuç bulunamazsa uyarı mesajı göstermek yerine bu bilgiyi kullanıcıya gösteren bir eleman oluşturabilirsiniz. STO, sonucu kullanıcıya geri göndermemizi kolaylaştıracak ve gerekmeyecek ek kod uygulamanın istemci tarafında. Liste 12-4'teki kod, Liste 12-3'teki ile hemen hemen aynıdır, ancak bu sefer, kullanıcıya hiçbir sonuç bulunmadığını belirtmek için göstermek istediğimiz XML öğelerine metin giriyoruz.

Listeleme 12.4. Sonuçsuz XML dosyası

sonuç yok

// O Şirket adı yerine "Sonuç Yok" görüntüleniyor Yok

490 Bölüm IV. Ajaxin örnekleri

// © Kalan alanlar "N/A" ile değiştirilmiştir.

Yok

Yok

Bu kod ile kullanıcıya istenen bilgilerin eksik olduğunu söyleyen tek bir satır gösteriyoruz. Şirket O tanımlayıcısı, sonuç olmadığını gösteren bilgileri görüntüler. Diğer tanımlayıcılar 0, kullanıcıya hiçbir bilgi olmadığını söyler. "N/A" ("mevcut değil") metnini görüntülemek istemiyorsak, bunun yerine şunu ekleyebiliriz: kırılmaz alan, tablo hücrelerini gösterecek. Hiç bilgi eklememiş olsaydık, tablodaki hücreler görünmeyecekti.

Görüldüğü gibi XML formatı oldukça basit bir yapıya sahiptir. Eğer verilen XML dosyası statik olduğundan, kullanıcının dosyaya yeni bir abone eklemesi nispeten kolay olacaktır. Dinamik olarak üretildiğinden, sonuç kümesinden bir XML belgesi oluşturan bir döngüye ihtiyacımız var.

Dinamik XML Belgesi Oluşturma

Her zamanki gibi sunucu üzerinde bir XML belgesi oluşturuyoruz. Örneklerde farklı sunucu dilleri kullanma politikasına uygun olarak, bu bölüm için sunucu kodu PHP ile yazılmıştır. Ajax çerçevesinin herhangi bir sunucu taraflı dil kullanılarak oluşturulabileceğini bir kez daha hatırlayın ve ayrıntılara girmeden sadece sunucu taraflı kod uygulama prensibini açıklayacağız. Dolayısıyla Liste 12-5, uygulamanın sunucu tarafının kodunu gösterir. Kod, bir sorgu dizesi parametresi alır ve çok sayıda veritabanı sorgu sonucu üretir. Ardından, sorguya yanıt olarak döndürülen her telefon numarası için Liste 12.4'te gösterildiği gibi XML dosyasında bir öğe oluşturarak sonuç kümesini yineliyoruz.

Listeleme 12.5. phoneXML.php komut dosyası: sunucuda bir XML belgesi oluşturma

// MIME Türünü Bildirme Hakkında header("İçerik türü: metin/xml"); Eko("\N");

// © Veritabanına bağlan

$db = mysql_connect("localhost", "ajax", "eylem"); rnysql_select_db("ajax",$db);

$sonuç = mysql_query("SEÇ *

Kişiler NEREDE KişiAdı "%" gibi. // © İsteği doldurun

$_GET["q"] ."%"",$db); ?>

// O Sonuçları kontrol et

if ($myrow = mysgl_fetch_array($result)) ( yap (

// © Sonuç kümesinde döngü

Bölüm 12 XSLT 491 ile Canlı Arama

001">

)while ($myrow - mysql_fetch_array($sonuç)); )başka(

Telefon rehberi veya "Sonuç Yok" mesajını verin 0.

12.3.2. Bir XSLT belgesi oluşturun

XSLT kullanılarak, XML dosyamız birkaç satır kodla güzel bir HTML tablosuna dönüştürülebilir. Bir XSLT belgesi, verileri gerekli herhangi bir biçimde görüntülemek gerekirse şablon eşleştirmeye izin verir. Şablon eşleştirme, verileri görüntülemek için bir şablon yapısı kullanır. Aynı zamanda ağacın düğüm noktalarından geçiyoruz.

492 Bölüm IV. Örneklerde Ajax

XSLT kullanarak kaynak. Bir XSLT belgesi, yapılandırılmış bir XML dosyasını alır ve onu görüntülemesi, güncellemesi ve değiştirmesi kolay bir biçime dönüştürür. Bizim durumumuzda, XSLT belgesi statik olarak tanımlanmıştır.

XSLT yapısı

Bir XSLT dönüşümü, bir kaynak ağacı bir hedef ağaca çevirmek için kurallar içerir. Tüm XSLT işlemi, bir şablon yapısıyla eşleştirmektir. Kaynak ağacın öğeleri verilen yapıyla eşleştiğinde, hedef ağaç belge şablonuna göre oluşturulur.

Hedef ağacın yapısı, kaynak ağacın yapısı ile ilişkili olmak zorunda değildir. Bu nedenle, orijinal XML dosyası istenen herhangi bir biçime dönüştürülebilir. Veri kümesinin yalnızca tablo görünümünü kullanmak gerekli değildir.

Bir XSLT dönüşümü, sonuçtaki ağacın stilini tanımladığı için stil sayfası olarak adlandırılır. Stil sayfası, iki bölümden oluşan şablon kurallarını içerir. İlk kısım, kaynak ağacın düğümlerinin karşılaştırıldığı şablon yapısıdır. Bir eşleşme bulduktan sonra, XSLT işlemci ikinci kısmı kullanır - kaynak ağacı oluşturmak için tanımlayıcıları içeren bir şablon.

Bir XSLT belgesi oluşturun

Belirli bir proje için bir XSLT dönüşümü oluşturmak nispeten basittir. Bir tablo elde edeceğimiz için süslü desen eşleştirmeye gerek yok; kaynak ağacın tüm eleman düğümlerinden sırayla geçiyoruz. Aşağıda, dört sütunlu bir HTML tablosu oluşturan bir şablon geliştireceğiz. Bu proje için ilgili XSLT dosyası Liste 12-6'da gösterilmiştir.

Listeleme 12.6. XSLT dosyası

"ISO-8859-l"?>

// О XML sürümünü ve kodlamayı ayarlayın

// © XSLT ad alanını ayarlayın"http://www.w3.org/1999/XSL/Transform">

// © Şablon kurallarını belirleyin

// Tablo öğesi ekleme hakkında

// © Bir başlık çubuğu oluştur

Bölüm 12 XSLT 493 Kullanarak Canlı Arama

// 0 Telefon rehberinin öğelerini sırayla gözden geçirin

select="phonebook/entry"> // © Çıktıyı biçimlendir

şirket temas etmek Ülke Telefon

Bir XSLT dönüşümü oluşturduğunuzda, XML O kodlamasını ve sürümünü belirtmeniz ve XSLT © ad alanını belirtmeniz gerekir. Ad alanı, bir belgenin uyması gereken kuralları ve belirtimleri tanımlar. XML ad alanındaki öğeler kaynak belgede tanınır ancak sonuç belgesinde tanınmaz. xsl öneki, XSLT ad alanındaki tüm öğelerimizi tanımlamak için kullanılır. Ardından, bir şablon kuralı oluşturabilirsiniz - tüm belgeyle eşleşen bir yapı / © arayın.

Artık sonuçlarımızı gösteren bir tablo şablonu oluşturmaya başlayabiliriz. Bir tanımlayıcıyı tabloya eşleyen bir O tablo tanımlayıcısı ekliyoruz. Bunu, kullanıcıya tabloda hangi bilgilerin bulunduğunu gösteren sütunların adlarını içeren bir tablo başlık satırı © izler.

Kaynak ağacın düğüm kümesinden sırayla geçerek tablonun kalan satırlarını alırız. Bu durumda, girişlerin işlenmesi sürecinde, telefon defterinde/girişte bulunan düğümleri yayınlayan bir for-her © döngüsü kullanılır.

Belge ağacında sırayla gezindiğimiz için sütun değerlerini seçmemiz gerekiyor. Düğümlerden değer seçmek için, xml öğesinin değerini çıkarmak ve dönüşümün çıkış akışına eklemek için to operatörü değeri kullanılır. Kurmak XML öğesi metnini çıkartmak istediğimiz öğe adı ile birlikte seçme özelliğini kullanın. XSLT dosyasını oluşturduktan ve XML belgesini dinamik olarak oluşturmak için kodu oluşturduktan sonra, JavaScript kodunu tamamlayabilir ve bir XSLT dönüşümünü yapılandırılmış bir XML dosyasıyla birleştirmenin nasıl göz atması kolay bir tablo oluşturduğunu görebilirsiniz.

Bir sonraki adımda, HTTP yanıtıyla az önce oluşturduğumuz dosyaları alarak tekrar client tarafına dönüyoruz.

Şirketimiz, mobil iş uygulamalarının sunucu kısmının oluşturulması ve yüksek yüklü ortamlarda çalışan istemci web servislerinin oluşturulması için hizmetler sunmaktadır. Her projeyi geliştirirken, ortaya çıkan ürünün en iyi hale gelmesi için bireysel bir yaklaşım uygulamaya çalışıyoruz. en uygun çözümözel müşteri hedefleri.

Sunucuda veri depolayan ve/veya işleyen karmaşık bir uygulama kullanıyorsanız, bunun arkasında bir Back-end vardır - yazılım paketi, bir web sunucusunda barındırılan ve bu durumda Ön uç olarak adlandırılan bir uygulama üzerinde çalışan. Sunucuda barındırılan uygulama ile aynı anda çalışabilir büyük miktar gereksinimleri getiren müşteriler, yüksek hız ve operasyonunun güvenliği.

Genellikle bir uygulamanın sunucu tarafı şu şekilde yazılır: PHP dili, bu tür çözümler için en popüler olarak. Basit sunucu görevlerini uygulamak için kullanılabilir standart sistemler, ancak daha spesifik olanlar için zaten standart sistemler üzerinden kendi çözümünüzü veya eklentilerinizi geliştirmeniz gerekiyor.

Bir mobil uygulama için sunucu geliştirme ilkeleri

Programcılarımız, her türlü, hatta çok yüksek iş yükü ve çeşitli alanlar için çok çeşitli çözümler uygulamamıza izin veren teknolojilerle çalışır. Bireysel görevler için de ayrı sunucu çözümleri üretiyoruz.

organizasyonel kontrol

Her proje, geliştirmenin tüm aşamalarından ve projenin zamanında tesliminden sorumlu ayrı bir uzmanlar grubu tarafından oluşturulur.

Programlama

Sunucu mimarisinin tasarlanması, veritabanlarının oluşturulduğu ve gerekli algoritmaların oluşturulduğu en önemli adımdır.

Test yapmak

Yazılım kısmı hatasız ve hatasız çalışmalıdır. Bu, sistemin doğrulamasını gerçekleştiren test uzmanlarının sorumluluğundadır.

Teknik Destek

Çalışanlarımız, eksiklikleri hızlı bir şekilde gidermenizi ve güncellemeler yapmanızı sağlayan programların tam teşekküllü teknik desteğini gerçekleştirir.

Geliştirme özellikleri

Uygulamanın sunucu bölümünü yetkin bir şekilde geliştirmek için, sunucuda kullanılan programlama dili hakkında belirli beceriler ve bilgiler gereklidir. Uygulamada görüldüğü gibi, istemci-sunucu uygulamaları PHP'de oluşturulur. Bu alanda tartışmasız liderdir. Dünyadaki sitelerin yarısından fazlası PHP ile yazılmıştır, geliştirme ve destek için uygundur.

Çerçeve

Bu yazılım platformu, projeyi daha ölçeklenebilir ve esnek hale getirmenize olanak tanır. Bununla birlikte, çerçeve mümkün olduğu kadar doğru seçilmelidir, bu nedenle, daha sonra yüksek kaliteli bir ürün geliştirmeye yardımcı olacak, projenin çalışma belgelerinin derinlemesine bir analizi gereklidir.

Arka uç geliştirme için kullanılan başka diller de var. Örneğin, oluşturulan sunucu uygulamaları Delphi ortamı. Bu nedenle, program hata ayıklamayı geliştirdi. Üstelik geliştirmesi daha kolay benzersiz programlar, görsel oluşturma sağlar. Tüm bunlar, net ve kullanışlı bir arayüz oluşturmanıza olanak tanır.

Java sunucu uygulamaları daha az popüler değildir. Kolayca tamamlanır, farklı platformlarda kolayca yürütülür ve yüksek güvenlik düzeyine sahiptir.

Yaygın olarak kullanılan başka bir dil. Bununla birlikte, sunucu uygulamaları kolayca, hızlı ve hiçbir ek ücret ödemeden oluşturulur.

Hemen hemen tüm modern şirketlerin kendi sanal ofisler. Web sitesi, bir kartvizit veya bir portal veya ödeme seçenekleri olan çevrimiçi bir katalog olabilir.

Bu durumda iş süreçleri, web sunucularına, yani saldırılara, bilgisayar korsanlığı girişimlerine ve harici olumsuz etkilere dayanma yeteneklerine ve aynı zamanda alınan birçok istek için yeterli performansa bağlıdır.

Web hizmeti geliştirme aşamaları

Farklı pazar segmentleri için uygulamalar oluşturarak, çalışmalarımızı buna göre organize ediyoruz. tek prensip– tüm süreci, ilerlemesi ve sonuçları müşterilere raporlanan ayrı adımlara ayırıyoruz. Böylece, sunucu mobil uygulama benzer şekilde gelişmiştir.

1. Fikir geliştirme

2 haftaya kadar

Bu aşamada temel atılıyor, neyin atılacağı ve ne yönde gelişeceği hakkında fikir veriyor.

2. Proje değerlendirmesi

2-3 hafta

Uzmanlarımız işin süresini ve maliyetini değerlendirir, ardından geliştirme için bir ön teklif hazırlanır.

3. Görev tanımı ve sözleşme

2 haftaya kadar

Müşteri ile sürecin tüm nüanslarını tartıştıktan ve ayrıntılı bir Görev Tanımı hazırladıktan sonra bir sözleşme hazırlanır ve imzalanır.

4. Arayüz geliştirme

2-3 hafta

Yazarken ihtiyaç duyulan arayüzlerin oluşturulması yazılım modülleri, tasarımcılar devreye giriyor.

6. Test

2-3 hafta

Alınanların kapsamlı doğrulaması yazılım çözümü test cihazları tarafından bir dizi uygun araçla üretilir.

7. Projenin tamamlanması

2 haftaya kadar

Kararlaştırılan zaman çerçevesi içinde, müşteriye hazır, kapsamlı bir şekilde test edilmiş bir web hizmeti teslim edilir.

bizim takım

Ticari faaliyetlerin ve müşterilerimizin ihtiyaçlarının analizi yoluyla, bir dizi iş sorununu çözmeye yardımcı olan gerçek dünya ürünleri yaratıyoruz. kullanım modern teknolojiler ilgili mobil uygulamaların yüksek performansını garanti eden sunucu yazılımının uygulanması için çok çeşitli olanaklar sağlar. Ekibimiz tarafından temsil edilmektedir:

Proje yöneticileri

Bu çalışanlar hem müşterilerle hem de geliştiricilerle etkileşime girerek aralarında iletişim sağlar. Hem önceden planlanmış eylemlerin hem de gerekli iyileştirmelerin uygulanmasını izlerler.

Tasarımcılar

Çalışmalarında, uzmanlarımız işletim için arayüzler oluşturma gerekliliklerini göz önünde bulundururlar. iOS sistemleri ve Android, böylece yayınlanan uygulamalar farklı cihazlarda düzgün çalışır.

Geliştiriciler

Mobil uygulamaların performansını optimize etmek için programcılar bunları analiz eder. sistem gereksinimleri ve özel sunucu yazılımı oluşturun.

Test cihazları

Kapsamlı testler, bitmiş ürünün kalitesinin garantisi ve saklanan ve işlenen verilerin güvenliğinin garantisidir. Bu uzmanlar farklı araçlar ve etkili bir metodoloji kullanır.

Hangi hizmetleri oluşturuyoruz?

Site yazılımına gömülü olmak veya bağımsız program, reklam, analiz, planlama ve iş tanıtımı ile ilgili görevleri gerçekleştirmek için bir web hizmeti kullanılır. Bu bağlamda, hangi tür kaynağın en iyi çözüm olacağına karar vermek gerekir.

bilgi projeleri

Çeşitli içerikleri barındıracak şekilde tasarlanmıştır.

Tematik siteler

Sayfalarının neredeyse tamamı tek bir konuya ayrılmıştır. Onlara olan talep hala oldukça yüksek.

haber siteleri

Hayatın ana alanlarını yansıtan bir veya daha fazla konu çerçevesinde çeşitli haberler hakkında bilgi verirler.

Bloglar

Bu kaynakların popülerlik seviyesi sürekli artıyor. Haber siteleri gibi, şu veya bu bilgiyi İnternet topluluğuna iletirler, ancak bu durumda yazarlar kişisel görüşlerini ifade eder.

Sosyal projeler

Bunlar, uzmanlaşmış sosyal ağlar, topluluklar, forumlar vb.

Forumlar

Çeşitli haberleri, ürünleri/hizmetleri vb. tartışmak için oluşturulmuştur. Hem dar odaklı hem de çeşitli olabilirler.

Sosyal medya

Bu kaynakların milyonlarca izleyicisi var. Ana görevleri, İnternet kullanıcılarına metin / metin yoluyla çevrimiçi iletişim kurma fırsatı sağlamaktır. sesli mesajlar ve görüntülü iletişim.

Çeşitli web hizmetleri

Bugün yaygın, birkaç türe ayrılırlar.

kataloglar

Posta hizmetleri

Kullanıcılara mektupları ve belgeleri görüntüleme, gönderme, düzenleme vb. dahil olmak üzere e-postanın tüm özelliklerini ve avantajlarını sağlayın.

Arama motorları

Siteleri aramak için kullanılır ve çeşitli bilgiler belirli istekler için.

Duyuru panoları

Ağ kullanıcılarının çeşitli konularda hizmet alım satımı için reklam verdikleri web kaynaklarıdır.

Barındırma siteleri

Dosyaların geçici olarak saklanması için tasarlanmıştır. Bazıları, indirmeden önce verileri tanıma fırsatı sunar.

SSS

Aşağıda, uzmanlarımıza sıklıkla sorulan soruların yanıtlarını sunuyoruz. Aradığınız bilgiyi burada bulamazsanız, lütfen sorunuzu buraya yazın. biçim ve kesinlikle cevaplayacağız.

Bir uygulama ve bir web sunucusu oluşturmak ne kadar sürebilir?

Ortalama olarak, bu çalışma 9 ila 20 hafta sürer. Her şey, uygulanan görevin karmaşıklığına bağlıdır.

Geçmişte çevrimdışı, bugün çevrimiçi olmak bir zorunluluktur. En azından modern iş dünyası için. Markaların ürün ve hizmetlerinin sunumları, çevrimiçi sipariş ve teslimat, müşteri tabanının bakımı, müşterilerle iletişim ve çok daha fazlası - tüm bunlar İnternet olmadan imkansızdır. Bir uygulamaya ihtiyacınız varsa, hem Ön Uç'a (web arayüzü) hem de Arka Uç'a (uygulamanızın sunucu tarafı) sahip olmalısınız. Ve uygulamanızın içeriğini geliştiricilerin katılımı olmadan düzenleyebilmek istiyorsanız, iyi bir yönetici paneline ihtiyacınız var.

Mobil uygulamalardaki front-end, X-Code ve Java gibi teknolojiler kullanılarak oluşturulurken, veritabanının ve tüm uygulama mantığının saklanacağı back-end, sunucu tarafı programlama diline ilişkin profesyonel bilgi gerektirir. İyi bir örnek, hemen hemen tüm arka uçları geliştirmek için kullanılan tartışmasız en popüler programlama dili olan PHP'dir. Bu tartışmasız lider.

PHP için pek çok uygulama vardır: statik ve dinamik web siteleri + özel içerik yönetim sistemleri, sosyal medya, özel CRM sistemleri, yazılım e-ticaret ve daha fazlası için. Elbette ücretsiz veya ucuz sunucu parçaları ve kontrol panelleri var. Ancak çoğu durumda gerekli kolaylık, özelleştirme ve yükseltilebilirlik düzeyini sağlamazlar.

Programcılarımız, çeşitli iş hedefleri, ihtiyaçları ve gereklilikleri için çok çeşitli çözümler uygulamamıza izin veren teknolojilerle çalışır. Her proje için sistem gereksinimlerini ayrı ayrı analiz ediyor ve mobil uygulamanızın optimum performansı için çeşitli özel sunucu yazılımları uyguluyoruz.

Mükemmel bir kullanıcı deneyimi için sıfırdan bir uygulama oluşturmak veya mevcut bir uygulamayı geri yüklemek için sizi en akıllı ve uygun maliyetli çözüme götürebilecek bir ekip arıyorsanız, başka yere bakmanıza gerek yok. Appsmob, sizin için en iyi çözümü bulmanıza yardım etmeye hazır.

YEDEKLER

Bir mobil platformda neden yedeklemelere ihtiyaç duyulur?

Uzmanlar, 1C mobil uygulamalarının bazen ne kadar güvenilmez olduğunu bilirler: Kullanıcı tabanlarının basitçe çökmesi nedeniyle herhangi bir zamanda hatalar meydana gelebilir. Aynı zamanda, cihazların güvenilmezliği ile karşı karşıyayız: kırılabilirler, kaybolabilirler, çalınabilirler ve kullanıcılar verilerini saklamak isterler. Ve 8.3.9 sürümüne kadar bir platform yedekleme mekanizmamız yoktu.

Kullanıcıların daha önce bir "kopyasını kaydet" düğmesi olmadığı için, Boss uygulamasının geliştiricileri yedeklemeleri kendileri yapmak zorunda kaldı. Nasıl yaptık?

Veritabanı verilerini XML biçiminde kaydediyoruz.

Kullanıcıya kopyaları saklamak için çeşitli seçenekler sunmanız önerilir - her şeyden önce, müşteriler için uygundur, kendileri için en iyi seçeneği seçebilirler: buluta yükleyin, postalarına gönderin, cihaza kaydedin.

Böylece, geliştiriciler ek olarak kendilerini sigortalarlar. Bir şeyler ters giderse ve Google Drive veya Yandex Drive'da kopya oluşturma mekanizması aniden bozulursa, kullanıcıya her zaman şunu söyleyebilirsiniz: şu an geliştirici hatayla ilgilenir, ancak şimdilik verileri kaydedebilir alternatif yol. Ve kullanıcılar, verileri konusunda sakin olabildikleri için memnunlar.

zorunlu olarak bulut hizmetlerine odaklanın, çünkü cihaz kaybolursa veya bozulursa ve kullanıcı aynı cihaza bir kopya kaydettiyse, veriler kaybolacaktır.

Ayrıca biz kullanıcıya yedekleme oluşturma ihtiyacını hatırlattığınızdan emin olun.

Yapılandırma değişirse kopyalar nasıl kaydedilir?

Toplu bir çözümden, sürekli değişen, gelişen ve iyileşen bir uygulamadan bahsederken müşterilerin davranışlarını da dikkate almalıyız. Kullanıcı, kaydedilen bir yedeği geri yüklemek isteyebilir. eski versiyon hiçbir detayın olmadığı uygulama. Ve sonra görev ortaya çıkar: verileri okumak, ardından uygulamanın eski sürümünden güncelleme mantığına göre verileri doldurmak. Nasıl yapılır? Verilere ek olarak, daha sonra bunları nasıl okuyacağınızı öğrenmek için veri yapısının kendisini de kaydedin.

Bu veri yapısını depolamak için yapılandırmanın kendisinde depolamak da dahil olmak üzere birkaç seçenek vardır. Yani, her yeni sürümün yayınlanmasıyla birlikte meta veri yapısını kaydedin. önceki versiyon yapılandırmada düzen için.

Unutmayın ki bir mobil uygulamada konfigürasyon öylece büyümemeli, içindeki yere değer vermeli, mümkün olduğunca kompakt hale getirmeliyiz. Ancak uygulama gelişiyor ve bu tür birçok düzen olacak ve zamanla bunların sayısı giderek artacak.

Bu nedenle, bir mobil uygulama söz konusu olduğunda, başka bir yol tercih edilir - meta veri yapısını doğrudan veri dosyasına kaydedin. Çıktıda, ilk başta bazı yardımcı verileri - yapılandırma sürümü, yapılandırma şeması, dizi sınırları - sakladığımız ve bundan sonra kullanıcı verilerini kendilerinin içine yazdığımız böyle bir dosya alırız. XML biçimi. Ayrıca, dosyanın "Yardımcı veriler" bölümünde, herhangi bir nedenle XML'e yazılamayan diğer önemli verileri de saklayabilirsiniz.

Dosyaya kaydedilen veri şemasını alıyoruz ve buna göre dosyayı okumak için XDTO paketini oluşturuyoruz. Veritabanında benzer bir nesne oluşturuyoruz, içini dolduruyoruz, güncelleme sırasında tamamlama işlemini gerçekleştiriyoruz ve bitmiş nesneyi veritabanına kaydediyoruz.

Aşağıdaki resimde, bu konfigürasyonların XDTO modelini güzel bir şekilde nasıl yazacağınıza dair bir ipucu görebilirsiniz. Boss uygulamasını yayınlayan şirket, bunu denedi, birkaç yol buldu, ancak meta veri şemasını yazmak için yalnızca bu seçeneğe karar verdi. Veri dosyasının kendisi açıldığında, uygulamanın tüm meta verilerini listeleyen, okunabilir, olağan yapılandırılmış XML'i görebilirsiniz.

// Yapılandırma şemasını yaz XDTO Modeli = XDTO Factory.XDTO Modeli Export("http://v8.1c.ru/8.1/data/enterprise/current-config"); FactoryXDTO.WriteXML(DosyaYükleme, ModelXDTO); // Konfigürasyon şemasını oku ModelXDTO = FactoryXDTO.ReadXML(ReadingXML, FactoryXDTO.Type("http://v8.1c.ru/8.1/xdto","Model")); Fabrikayı Kaldır = Yeni XDTO Fabrikası(XDTO Modeli);

Kullanıcıyı korumak için, yedeği geri yüklemesi gerekip gerekmediğini kendisine tekrar sormak gerekir. Belki de sadece deney yapıyor ve uygulamadaki her şeyin üzerindeki düğmelere tıklıyordu :) Ve şimdi mevcut verileri kaybolabilir. Bu nedenle, potansiyel olarak "tehlikeli" eylemler gerçekleştirirken, bunu gerçekten isteyip istemediğini ve bunun nasıl olması gerektiğini her zaman netleştiririz. Kullanıcı eylemlerinin farkında olmalıdır.

Çevrimdışı bir çözümden bahsettiğimizde, kullanıcının tüm verileri yalnızca bir mobil cihazda depolandığında, yedekleme oluşturmak için bir mekanizma olmalıdır: kullanıcı cihazını kaybedebilir ve ardından veriler kaybolacaktır. Ve uygulama çevrimdışı çalışmıyorsa, ancak merkezi bir sunucuya bağlıysa, kullanıcının böyle bir sorunu olmaması gerekir, çünkü cihaz kaybolursa sunucuya bağlanacak, tüm verilerini alacaktır. sunucu tekrar ve her şey yoluna girecek.

Ancak, kullanıcılar yedeklemeleri her zaman onlardan beklediğimiz şekilde kullanmazlar :) Bunları genellikle verileri basitçe "geri almak" için kullanırlar. Bu gerçekten çok garip bir davranış, ancak mobil uygulama kullanıcıları veri girerken nerede hata yapabileceklerini anlayamayacak kadar tembeller ve sadece verileri geri alıp o günkü verileri yeniden başlatıyorlar. Boss uygulamasıyla çalışmanın istatistiklerini inceledikten sonra bunun normal bir uygulama olduğunu ve bu tür kullanıcı davranışlarının tahmin edebileceğimizden daha yaygın olduğunu fark ettik.

Ve diğer cihazlarla senkronizasyon kullanıyorsanız, bunu işlemeniz gerekir. Burada birkaç çözüm var:

  • üzerindeki verilerin olduğu gibi kalacağını ve kopyanın yalnızca kullanıcının cihazına geri yükleneceğini belirterek sunucuyla bağlantıyı kesin;
  • kullanıcının, daha önce bu tür mekanizmalar öngördüğü için, bir kopyayı tüm cihazlara aynı anda geri yüklemesine izin vermesi daha iyidir.

Burada bir nokta daha var. Şimdiye kadar yedekleri kendimiz kaydettik, tüm süreci kontrol ettik, kullanıcının "kopyasını kaydet" düğmesine tıkladığı anda eylemlerini doğrudan kodda yakaladık. Bütün bunlar daha sonra işlenebilir. Platform 8.3.9'da, platformun araçlarını kullanarak yedekleri kaydetmek mümkün hale geldi. Ve kullanıcı bunu bizim bilgimiz olmadan yapıyor. Merkezi bir veri tabanı ile senkronizasyon kullanılıyorsa, böyle bir senaryonun işlenmesi gerekir. Kullanıcının önceden kaydedilmiş bir kopyayı geri yüklediğini sunucumuzda bir şekilde öğrenmeli ve ona bir tür karar vermeliyiz. Verilerin senkronizasyonunun bozulmasına izin veremeyiz.

DEĞİŞME

Bir mobil platformda özel bir çözümden bahsettiğimizde, genellikle örneğin kullanmak isteyen bir müşterimiz olur. mobil platform satış acenteleri için ve merkezi bir veri tabanı ile veri alışverişi yapmaları için. Burada her şey basit: bir veritabanı, birkaç cihaz, sunucuyu yükseltirsiniz, onunla iletişim kurarsınız. Böylece cihazlar arasındaki değişim sorunu kolayca çözülür.

Ancak, her biri çok sayıda kullanıcısı olan birçok veritabanının bulunduğu toplu bir uygulamadan bahsediyorsak, durum daha da karmaşık hale gelir. Kullanıcılar uygulamayı piyasadan indirdiler ve birbirleriyle senkronize etmek istiyorlar. Örneğin, bir koca bir kişisel finans uygulaması indirdi ve şimdi aynı uygulama üzerinde birlikte çalışabilmeleri için karısının da bağlanmasını istiyor. Birçok kullanıcı var, uygulama gelişiyor, büyüyor ve çok, çok büyük sayıda veri tabanına ihtiyaç var. Bütün bunlar nasıl organize edilir? Kullanıcılar, kendileri için ayrı bir veritabanı oluşturmak ve senkronizasyonu etkinleştirmek için geliştiricilerle kişisel olarak iletişime geçmeyeceklerdir. Bir düğmeye basmak ve her şeyin hemen çalışmasını sağlamak istiyorlar. Aynı anda.

Nasıl devam edilir? Veri ayırma mekanizmasının imdada yetiştiği yer burasıdır. Tek bir ortak yapılandırmanın olduğu, ancak aynı zamanda sınırsız sayıda kullanıcı veritabanının tek bir ortak veritabanında depolandığı tek bir veritabanı düzenlemenizi sağlar.

En iyi yanı, bizim katılımımız olmadan kullanıcıları dinamik, programlı olarak ekleyebilmenizdir. Gerçekte, kullanıcılar "sunucuya kaydol" düğmesine tıklamaları yeterlidir ve her şey kendi kendine olur: onun için sunucuda kişisel bir veritabanı oluşturulur ve o, hemen içinde çalışmaya başlayabilir.

Nasıl yapılır? İlk ve en kolay çözüm, kendinizinkini yazmaktır. sunucu tabanı bu mekanizma ile. Şirketimiz Boss uygulamasını yapmaya ve onun içinde değiş tokuş yapmaya başladığında, ilk sürümde tam da bunu yaptık: veri paylaşım mekanizmasına sahip bir sunucu veritabanı yazdık. Her şey işe yaradı, özellikle karmaşık bir şey olmadığı için - temel ayırıcı ortak bir özelliktir.

Ama sonra tekerleği yeniden icat ettiğimizi fark ettik :) Aslında zaten var anahtar teslimi çözüm, ve zaten düşünmediğimiz anları hesaba katıyor. Bu 1C: Taze.

Hizmetin ölçeklenebilirliği burada düşünülür: çok fazla veri ve veritabanı olduğunda ne yapılmalı, tüm bunlarla nasıl büyümeli. Burada yaratmayla ilgili bir an var. yedekler veri alanları: yani, yalnızca ortak bir veritabanını yedeklemiyoruz, belirli bir kullanıcının kopyalarını oluşturuyoruz. Dahası, oradaki mekanizma öyledir ki, kopyalar yalnızca gerçekten ihtiyaç duyulduğunda yapılır. Kullanıcı bir hafta boyunca veritabanına giriş yapmadıysa, o zaman onun için kopyalar yapmıyoruz çünkü orada hiçbir şey değişmedi. Fresh'in bir diğer özelliği de hizmetin sunucu üzerindeki yükü azaltacak bir mekanizmaya sahip olması ve bu çok fazla veritabanınız olduğunda çok önemlidir.

Genel olarak Fresh, bizim için yeni ve ilginç bir şey. Yavaş yavaş anlamaya çalışıyoruz, ancak çoğunlukla onun çalışmasından memnunuz.

Veri aktarımı. Cihazlar arasında paylaşım için nasıl uygulanır?

Platform iki mekanizma sağlar - SOAP ve http hizmetleri. Veri paylaşım mekanizması etkinleştirildiğinde bu hizmetlere nasıl erişileceği konusunda burada nüanslar var. Özellikle erişmekte olduğunuz alemin belirli sayısını gösteren parametreler eklemeniz gerekir çünkü platform, kullanıcı adından hangi veritabanına erişileceğini belirleyemez. Ayrıca, aynı kullanıcı tek bir veri tabanı içinde birden fazla veri tabanı ile çalışabilir (resme bakın).

Hizmetler açısından, Boss uygulaması anında paylaşımı uygular: bir kullanıcı verileri girer ve diğeri alır. Mobil uygulama kullanıcıları, her şeyin anında gerçekleşmesine alışkındır, biz de bunun nasıl olacağını düşündük. daha iyi hizmet kullanmak için - SABUN veya http. Bağlantı hızı önemli bir rol oynadı. Http'de bağlantı hızı çok daha yüksektir ve SOAP ile bağlanırken ağır ve yüklenmesi uzun süren bir hizmet açıklaması alırız. Platform, hizmetin bir açıklamasını depolamak için bir yola sahiptir, ancak dinamik olarak eklediğimiz parametreler nedeniyle WS bağlantılarını kullanamıyoruz. Ayrıca, deneyimlerimize göre http hizmetlerine erişim daha rahat ve esnektir.

Bu nedenle, amacımız gerçek zamanlı alışverişi uygulamaktır. Yani, kullanıcının bir yere gitmesi, bir düğmeye tıklaması, verilerinin ne kadar güncel olduğunu, güncellemesi gerekip gerekmediğini düşünmesi için yapmamaya çalışıyoruz ... Kullanıcılar her zaman güncel olmalıdır. -tarih verileri. Habercilerde çalışmaya çok alışkınlar - biri verileri gönderdi, diğeri hemen aldı. Her şey anında olur. Aynısı işle ilgili başvurular için de geçerlidir: bir satıcı satış yaptı, diğeri herhangi bir işlem yapmadan mevcut durumu hemen görmelidir.

Bu nedenle Boss uygulaması, değiş tokuşlar için arka plan işlerini kullanır. Veritabanına her veri yazılmasından sonra çalışır arka plan işi, değişimi başlatan. İlk kısım, verileri sunucuya göndermektir. Diğer cihazların daha sonra yeni veri olduğunu bilmesi gerekir. Bunun için PUSH bildirimlerini kullanıyoruz. Bu şema zaten çalışıyor ve yeterince hızlı çalışıyor.

Ancak daha da hızlı istedik çünkü gerçek zamanlı çalışıyoruz ve genellikle çok az veriye sahibiz. Küçük XML'imiz var, ancak aynı zamanda bu verilerle birinci cihazdan sunucuya bir mesaj gönderiyoruz, sunucu başka bir cihaza PUSH gönderiyor ve ardından ikinci cihaz PUSH aldıktan sonra kendi adına değişimi başlatıyor, sunucuya erişir ve veri ister, bu veriyi alır ve ardından verinin alındığına dair bir yanıt gönderir. Bu uzun bir zaman, ancak çok az veri vardı.

Bu süreci nasıl hızlandırabiliriz diye düşündük.

Bunu yapmak için, PUSH'ın neleri içerdiğini ve hala nasıl kullanılabileceğini anladık. PUSH'ın veri ve metin gibi alanlar içerdiği ortaya çıktı. İOS ve Android için belgeler, PUSH mesajlarının boyutunun sınırlarını gösterir, ancak bu bize yeterli gelmedi ve bunu kendimiz çözmek istedik. Ve iOS için izin verilen karakterlerin toplamının 981 karakter ve Android için 3832 karakter olduğunu kontrol ettik. İkinci durumda, kısıtlamayı kullanmak oldukça mümkündür, bir veya birkaç temel nesne böyle bir hacme itilebilir. Ve sonra şirketin geliştiricileri planı biraz değiştirdi. Çok fazla veri olmadığında, onu bir cihazdan gönderiyoruz, sunucuda alıyoruz, PUSH'ta paketliyoruz ve doğrudan başka bir cihaza gönderiyoruz. Plan kısaldı ve değişim daha da hızlandı :)

PUSH kullanmanın önemli bir noktası da kullanıcıları rahatsız etmemesi.

Bu durumdan kurtulmak çok kolay: sadece kullanıcıya çok fazla PUSH mesajı göndermeyin :) Eğer o anda uygulamada çalışıyorsa, çok fazla mesaj gönderebilirsiniz. Platform çalışırken kullanıcı PUSH'ı görmez, her şey onun için otomatik olarak gerçekleşir. Ancak uygulama kapatıldığında, müşterinin çok fazla okunmamış mesajlar. Bu nedenle, cihazdan uygulamanın çalıştığına, etkin olduğuna ve önceki PUSH'un zaten işlendiğine dair bir yanıt alınana kadar hiçbir durumda bir sonraki PUSH göndermemelisiniz.

Değişimin bir başka nüansı da web üzerinden çalışmaktır. Asenkroni mümkün olduğunca kullanmamız gerekiyor. Her zamanki gibi çalışamazsınız - kod yazın - bir işlev çağırın - çalışmasını bekleyin - bir yanıt alın - ve her şey yolunda. Web üzerinde çalışıyorsanız, yine de belirli sınırlamalarla karşılaşırsınız, örneğin kararsız internet, uzun süren işlemleri gerçekleştirirken zaman aşımlarını tetikler. Bu nedenle, mimariyi önceden düşünmek gerekir.

Cihaz kaydı örneğine bakalım, kullanıcı kayıt olmak istediğinde uygulamada neler oluyor. Bir süre kayıt tutuyor, bir sürü veri girdi ama sonra satıcının da bu veri tabanıyla çalışmasını istiyor. Kullanıcı "kayıt ol" düğmesine tıklar. İlk başta her şey çok basitti: verilerini aldılar, sunucuya kaydettiler ve lütfen çalışabilir ve kullanıcıları bağlayabilirsiniz. Ancak daha sonra, bazı kullanıcılar için cihazdaki veritabanlarının kayıt sırasında zaten büyük ölçüde büyüdüğü bir durumla karşılaştık. Ve bu şema artık işe yaramadı çünkü. veritabanının tamamı sunucuya kaydedilirken, bağlantı zaman aşımı tetiklendi veya İnternet kesildi. Bu nedenle, bir senkron aramayı birçok kısa aramayla değiştirdik. Veriler artık tek seferde aktarılmak yerine paylaşılıyor. Sunucunun verileri işlemesi ve yazması için hiçbir şekilde beklemiyoruz. Verileri gönderdik, verilerin alındığına dair bir yanıt aldık, bağlantıyı kapattık. Periyodik olarak, sunucuyu, orada neler olup bittiğini ve nasıl olduğunu sorgulamak gerekir ve bu arada, alınan verileri yazan sunucuda bir arka plan görevi çalışır. Bu, çok fazla sunucu çağrısı yapar, ancak her şeyin iyi gideceğine dair bir garantimiz var. Ve ne zaman aşımları ne de İnternet istikrarsızlığı, tüm verileri sunucuya yüklemenizi engellemez.

GÜNCELLEMELER

Farklı uygulama sürümlerine sahip cihazlar arasında paylaşım

Piyasalara çıkan toplu bir uygulamadan bahsettiğimiz için güncelleme ve veri alışverişi sürecinin bazı özelliklerini dikkate almak gerekiyor.

Bir kuruluş için bir uygulama yayınladıysanız ve onu güncellemeye karar verdiyseniz, genellikle tüm çalışanların oybirliğiyle yeni uygulamayı yüklemeleri için bir komut verirsiniz. Uygulamayı piyasadan indiren kullanıcılarla bu yapılamaz. Onlara ne yapacaklarını hiçbir şekilde söyleyemezsiniz. Örneğin, uygulamada çalışıyorlar ve şimdi veya hiçbir zaman güncellemek istemiyorlar. Otomatik güncellemeleri yoktur, bu nedenle birkaç cihazın merkezi veri tabanına bağlanması ve hepsinin farklı versiyonlarda olması oldukça yaygındır. Bu olgunun bir başka nedeni de marketlerdeki yayınlanma süresidir: iOS ve Android için farklıdır. Düzeltme gibi temel şeyleri sık sık uygularız. kritik hatalar ve iOS'un iki haftalık kontrol yapmasını beklemek istemiyorum Yeni sürüm, en azından yalnızca Android için istiyoruz, ancak hemen şimdi bir güncelleme yayınlayın.

Kullanıcılara komut verme hakkımız yoktur. İsterlerse güncelleme yaparlar, istemezlerse hiçbir şey yapmazlar. Resimde, GooglePlay'deki sürümlere göre Boss uygulamasının yüklenme oranının yanı sıra sunucumuzdaki istatistikler de gösterilmektedir - geçen hafta boyunca sunucuyla veri alışverişi yapan cihazlara yüklenen uygulama sürümlerinin gerçek oranı. İşte çalışmak için bir set. Bu farklı versiyonlar ve çeşitli meta veriler. Ve aynı zamanda normal bir takas düzenlememiz gerekiyor :)

Geliştiriciler aşağıdaki görevlerle karşı karşıyadır:

  • Hepsinin çalışması gerekiyor. Kullanıcılar güncellemeyi unuttukları için kendilerini kötü hissetmemeliler. Bunu hiç fark etmemeliler. Güncellendi - daha iyi oldu, iyi, iyi.
  • Verilerin güvenliğini sağlamalıyız. Örneğin, bir kullanıcının bir dizini ve yeni bir özelliği varken diğerinin henüz yok. Ayrıca, yeni ayrıntılara sahip olmayan bir kullanıcı, cihazında bir değişiklik yaparsa, diğer cihazlardaki veriler kaybolmamalıdır.
  • Yeni bir sürüme geçtiğimizde verilerin güncellenmesini sağlamak gerekir. Kullanıcı yükseltmeye hazır olduğuna karar verdiğinde, yalnızca eski sürüme sahip olduğu için sahip olmadığı tüm yeni bilgilere otomatik olarak sahip olmalıdır.

Nasıl yaptık?

1. Sunucuda 2 adet exchange planı kullanıyoruz. Birincisi cihazlar arasında paylaşım için, ikincisi ise güncellemeler içindir. Örneğin, kullanıcıya bir dizin gönderdik ama içinde ölçü birimleri yani eksik veriler yok. Bunu hatırlamalıyız. Ve güncellendiğinde, sahip olmadığı tüm bilgileri ona göndermeliyiz. Bunun için ikinci bir değişim planına ihtiyaç vardır.

2. Nesneleri yazmak ve okumak için yedeklemeler için kullanılan mekanizmanın aynısını kullanırız, yani meta veri sürümünü kaydederiz. Bu durumda, sunucuyla çalışıyoruz ve yapılandırmaya istediğimiz her şeyi doğrudan eklemeye gücümüz yetiyor, bu nedenle uygulama geliştikçe yapılandırmaya düzenler biçiminde meta veri şemaları ekliyoruz.

Borsadaki ve sunucudaki büyük hatalar nasıl izlenir?

İlk olarak, sunucunun kendisinin kullanılabilirliğini kontrol etmeniz gerekir. Sunucularda olur - düşerler. İzlemek için özel bir şey icat etmedik, sadece bir telgrafta bir şeyler ters gittiğinde çığlık atan bir bot bulduk. Dakikada bir sunucunun performansını kontrol ediyor ve birdenbire sunucu kullanılamıyorsa bağırmaya başlıyor adminler bunu görüyor ve sunucuyu kaldırıyor.

Günlükten bir hata günlüğü de topluyoruz. Ayrıca doğaüstü bir şey yok - sadece her üç saatte bir hata günlüğü topluyoruz, postaya gönderiyoruz ve periyodik olarak gözden geçiriyoruz. Bu, yaygın sorunları ve bazı istisnai durumları görmenize yardımcı olur. Postaları görüntülemek, hataları takip etmek ve hızlı bir şekilde düzeltmek zor değil. Ancak bu, veritabanlarının büyümesiyle büyüyebilecek sorunları hızlı bir şekilde belirlemenize ve çözmenize olanak tanır.

Daha önemli nokta- kullanıcıya "şikayet etme" fırsatı verdiğinizden emin olun. Bu onların gözünde statümüzü yükseltir ve bizi kurtarır. En ufak bir hatada bize posta yoluyla hiçbir şeyin işe yaramadığı, veritabanının yüklenmediği, her şeyin çok kötü olduğu bir sürü mesaj göndermeye başlayan, bizim onlara "histerik" dediğimiz kullanıcılar var. Ama bazen bizi gerçekten kurtarıyorlar, çünkü bazen diğerlerinin henüz mucizevi bir şekilde keşfetmediği hatalar buluyorlar, ciddi hatalar.

Kullanıcı korkmamalıdır. Korkutucu mesaj yok, başka bir şey yok. Her şeyi güzelce anlatıp şikayet etmeyi teklif etmeleri gerekiyor. Ve her şeyi çözeceğimize söz veriyoruz. O zaman kullanıcılar memnun kalıyor çünkü kendilerine özen gösterildiğini görüyorlar ve kendilerine yardım edileceğine hemen inanıyorlar :)

Bu makale, INFOSTART EVENT 2016 DEVELOPER konferansında okunan raporun sonuçlarının ardından yazılmıştır. Daha fazla makale okunabilir.

2020'de herkesi Moskova'daki INFOSTART EVENT 2020 yıldönümünün yanı sıra 7 bölgesel buluşmaya katılmaya davet ediyoruz.

Mobil istemcilerin ters tarafı sunucudur.

Ek gereksinimler, uygulamanın özelliklerine bağlıdır:
sunucu ölçeklenebilirliği - SaaS için, sosyal uygulamalar, ideal olarak büyük bir ziyaretçi akışının beklendiği yerlerde bu koşul zorunludur. Kullanıcı sayısında kısıtlama bulunan veya sayının tahmin edildiği iş uygulamaları için, verilen mülk gerekli değil;
etkileşim: bir dizi uygulamaya bir bildirim mekanizması sağlanmalıdır - uygulamayı (kullanıcıyı) belirli olayların oluşumu hakkında bilgilendirmek için kullanıcıya bir mesaj gönderin. Örneğin, bir döviz sistemi veya otomatik bir taksi memuru bu özelliğe sahip olmalıdır.
açık API: üçüncü taraf geliştiricilerin, sistemin işlevselliğini belgelenmiş bir protokol aracılığıyla kullanabilecekleri varsayılır. Sonuçta, istemci hem mobil hem de harici bir sunucu uygulaması olabilir.
diğer gereklilikler...

Takım
Sistem geliştirme için proje ekibinin bileşimi ideal olarak aşağıdaki gibi olacaktır:
proje yöneticisi: projeyi yönetir, kontrol eder, müşteriyle doğrudan etkileşim kurar;
sunucu uygulama geliştiricisi: iş mantığı sunucusu, veritabanı geliştirir, ağ protokolü;
yönetici uygulama geliştiricisi: geliştirir web uygulaması, Kullanıcı arayüzü sunucu uygulamasını yapılandırmak ve yönetmek için;
Android istemci uygulama geliştiricisi;
iOS istemci uygulama geliştiricisi;
için istemci uygulama geliştiricisi...
test cihazı: yönetici uygulamasını ve istemci uygulamalarını test eder.

Dikkatli bir okuyucu, grafik arayüzlü bir sunucu uygulaması yazarsanız, örneğin HTML5'te paradan tasarruf edebileceğinizi fark edecektir. Bu durumda, istemci uygulamalarının geliştirilmesi gerekli değildir - kullanıcı arabirimi tarayıcı tarafından sağlanır. Bu makale böyle bir durumu dikkate almıyor, söz konusu için yerel uygulamalar geliştirme konusunda mobil cihazlar.

Tam donanımlı bir ekipte çalışma şansım oldu, ancak gerçekçi olun - insan kaynakları ve bütçe her zaman böyle bir ekip kurmanıza izin vermez. Ve bazen rollerin birleştirilmesi gerekir: proje yöneticisi + sunucu uygulaması geliştiricisi, istemci uygulaması geliştiricisi + testçi.

Teknolojiler, araçlar, kütüphaneler
Bir mobil istemci sunucusu geliştirmek için genellikle aşağıdaki "ücretsiz" teknoloji yığınını kullanırım:
Apache Tomcat bir servlet kabıdır;
MySQL - VTYS;
Subversion bir sürüm kontrol sistemidir;
Maven - projelerin montajını otomatikleştirmek için bir çerçeve;
JUnit - sağlayacak;
Apache Log4j - günlük kitaplığı;
Jenkins, sürekli bir entegrasyon sistemidir;
Hazırda Beklet - ORM (ayarlar, özelliklerde yapılandırma, xml dosyaları ve ek açıklamalar)
hibernate-generic-dao - Google'dan DAO uygulaması, veritabanı verileriyle çalışmak için ana yöntemleri uygular, yöntemlerde filtreleme ve sıralama uygulamalarını basitleştirir;
- kimlik doğrulama ve yetkilendirmenin (güvenlik) uygulanması, bir hizmet ve fasulye kabı (xml dosyalarında ve ek açıklamalarda yapılandırma), testler oluştururken de kullanırız.

Sistemin özelliklerine ve gereksinimlerine bağlı olarak, veri alışverişi protokolünü uygulamak için 2 seçenekten birini kullanıyorum.
Platformlar arası, hız, basitlik, verimlilik, ölçeklenebilirlik, açık API gerektiğinde, REST Web hizmetlerinin (RESTful) uygulanması olan Jersey'i alıyorum Ağ hizmetleri). Bu kitaplık, veri serileştirmeyi JSON ve/veya XML biçiminde kullanmanıza izin verir. REST yapılandırması, ek açıklamalar aracılığıyla korunur. Mobil cihazlar ile yapılan alışveriş için client tarafında daha basit bir uygulama olduğu için (bu nedenle “klasik” Web servislerini kullanmıyoruz) JSON formatı alınmıştır, daha az miktarda trafik oluşmaktadır. Jersey, JSON'un en uygun "türünü" ayarlamanıza olanak tanır.
Aksi takdirde, platformlar arası, yüksek performans, basitlik, verimlilik, etkileşime ihtiyacınız varsa, o zaman alırım
Apache MINA, ağ uygulamaları oluşturmak için bir çerçevedir.
Google protobuf, yapılandırılmış bir veri kodlama ve kod çözme kitaplığıdır. Veri yapısı tanımlanır başlık dosyaları*.proto, derleyici bunlardan Java sınıfları oluşturur (diğer programlama dilleri için de oluşturmak mümkündür: platformlar arası özelliği sağlayan C++, Objective-C, vb.);
java.util.concurrent - standart paketi kullanın.
Bu seçenek ölçeklendirilebilir, ancak iş mantığı dikkate alınarak mimari düzeyde tasarım aşamasında planlanması gerekir.

Gerçek bir SaaS hizmeti için teknoloji seçme örneğini kullanarak varsayımsal bir görev düşünün - insanların gerekli hizmetlerin veya işlerin performansı için sipariş vermelerine olanak tanıyan “Auknem Hizmetleri Müzayedesi” ve karşılığında kuruluşlar tekliflerini onlar için bırakıyor . Tüm temel gereksinimleri varsayılan olarak alıyoruz. Bu sisteme kaydın ücretsiz ve ücretsiz olduğu göz önüne alındığında, bunlara kesinlikle ölçeklenebilirlik eklemek gerekir. Peki ya etkileşim? Yüklenicileri (icracıları) yeni siparişlerin oluşturulması hakkında bilgilendirmek ve müşterileri aynı anda başvuruda alınan teklifler hakkında bilgilendirmek ve sadece tarafından değil, harika olurdu. e-posta. Buna dayanarak, uygulama için Google protobuf olan Apache MINA'yı alacağız. Aşağıdaki özelliğe bakıyoruz - açık API. Hizmet herkese açıktır, bu nedenle harici geliştiricilerin hizmetle entegre olmak isteyebileceğini varsayalım. Beklemek! O kadar basit değil. Apache MINA tabanlı protokol oldukça uygulamaya bağımlıdır ve nüansları bilmeden entegrasyon hiçbir şekilde şeffaf değildir. Böyle bir durumda hangi faktörün daha önemli olduğunu tartmanız ve bir seçim yapmanız gerekecektir.

Çözüm
Bir mobil cihaz sunucusu geliştirirken veya geliştirirken hangi teknolojileri, kütüphaneleri kullandığınızı bilmek benim için ilginç olurdu. benzer sistemler? Her şey değişir, hiçbir şey sonsuza kadar sürmez, her seviyede kendi avantajları ve dezavantajları olan alternatifler vardır: MySQL -