Clădire gateway smsmin sms

Dacă încercați să smoglize sms gateways cu open source, atunci cel mai probabil veți găsi Jasmin Gateway și Kannel. Despre Kannel ușor de a găsi un articol bun în segmentul ruskoyazychnyh Internetului, dar Jasmin lipsit de o astfel de atenție, așa că am decis astăzi să-i spun un pic despre dispozitivul său.







Dacă aveți o expunere scurtă

  1. Scris în Python
  2. Implementează SMPP 3.4
  3. Disponibil ca pachet de la ubuntu 15.10
  4. Pentru munca sa foloseste rabbitMQ si redis
  5. În esență, un singur filet (există părți separate care pot funcționa teoretic în mai multe fire, dar în practică acest lucru nu se întâmplă)
  6. Schimbarea setărilor se face, de obicei, în funcție de perioada de nefuncționare
  7. Performanță reală 100 de mesaje pe secundă (limita de intrare, outbound poate trimite cu o viteză de 1000 de mesaje) (versiunea 0.9b)
  8. Poate recepționa SMS-uri din protocolul http
  9. Poate funcționa ca client SMPP și ca server SMPP

Ce știe Jasmin:

  1. Acceptați sms-urile trimise prin SMPP sau http
  2. Redirecționați mesajul SMS către un serviciu smpp extern (de exemplu, către o companie de servicii mobile)
  3. Primiți și transferați alte statistici despre SMS
  4. Sprijină diverse codări SMS
  5. Sprijină sms-uri lungi (constând din mai multe mesaje)
  6. Abilitatea de a configura în mod flexibil comutarea canalelor de expediere SMS în funcție de expeditorul \ time \ time
  7. Contabilitate pentru finanțe și volumul de trafic SMS

Cum funcționează Jasmin

Dezvoltatorii în sine descriu arhitectura lui Jasmin după cum urmează:

Clădire gateway smsmin sms

Dar aș sugera să vă uit la arhitectură în ceea ce privește ceea ce se întâmplă cu mesajul când se lovește de serverul Jasmin. Mă voi uita la calea pentru mesajul smpp, pentru http calea va fi aceeași:

  1. Ascultarea portului Jasmin primește un mesaj. El verifică valabilitatea pe baza contextului și, în cazul în care nu validează în mod corect, o respinge (aici de modul în care este unul dintre punctele slabe Jasmin: aproape toate companiile cu care am lucrat nu folosesc Protocolul SMPP ca atare, dar a folosit unele dintre sale soluții, care diferă de protocol în momente separate - au trebuit să fie dozate în locuri cu mâna).
  2. Prin extinderea mesajului, Jasmin îl plasează în coadă în rabbitMQ, pentru o prelucrare ulterioară și începe să asculte portul.
  3. Într-un alt ascultător (dar în același fir), Jasmin primeste mesajul din coada si trimite-l pentru a intercepta, în cazul în care este configurat (intercepta - un mecanism în care script-ul predefinit este dat un mesaj, iar script-ul poate decide ca mesajul să facă în continuare de exemplu, puteți respinge, schimba destinatarul sau redirecționa conținutul mesajului zavisimoti cel mai mare dezavantaj cu intercepta în Jasmin este că pentru a schimba script-ul, trebuie să resetați sniffer că sub sarcină grea înseamnă pierderea unei părți a mesajului) ..
  4. Ulterior, pe baza comenzilor de la intercepta poluchaennyh și tabelul outinga calculează în cazul în care jasmin pentru a trimite mesajul și îl pune într-o coadă separată pentru fiecare furnizor de servicii de a trimite SMS-uri
  5. Într-un alt ascultător (dar în același fir), Jasmin primeste mesajul din coada și verifică dacă furnizorul de servicii pentru mesajul dorit pentru a oferi statistici, în caz afirmativ, scrie asincronă un mesaj la Redis, și trimite un mesaj






După ce ați primit aceleași date despre statisticile mesajului Jasmin, procedați în felul următor:

  1. Ascultarea portului Jasmin primește un mesaj. El o verifică pentru valabilitate pe baza contextului și, dacă nu este validă, îl aruncă.
  2. Prin extinderea mesajului, Jasmin se uită în redesign pentru mesajul original pentru a înțelege cine are nevoie să trimită răspunsul. Imediat după aceea, mesajul de la redis este șters. Dacă nu există niciun mesaj inițial, răspunsul este eliminat, altfel mesajul invers este pus în coada rabbitMQ.
  3. În alt ascultător (dar în același fir), Jasmin primește mesajul din coadă și trimite mesajul.

Evaluarea arhitecturii

Toată interacțiunea de bază în Jasmin este construită prin rabbitMQ. Luând în considerare posibilitățile de lucru asincron cu acesta, permite creșterea performanței considerabil în comparație cu o aplicație liniară cu un singur filet. Din moment ce Jasmin stochează doar informații temporare din memorie (de la trimiterea mesajelor SMS la recepționarea statusului lor), este destul de neobișnuit pentru memorie.

Pe de altă parte, un astfel de sistem de comenzi de transfer intern și mesajele pot duce la bug-uri repetabile destul de dificil: vom primi un răspuns la mesajul înainte ca mesajul este scris la Redis (acest bug-ul este foarte curios să observe și depanare). Motive similare nu permit dezvoltatorilor să rescrie codul, la o versiune multithreaded, fără modificări semnificative și complicații ale arhitecturii.

Un plus separat pentru extinderea lui Jasmin este utilizarea rabbitMQ și redis. Acest lucru vă permite să conectați module externe și de stocare, fără a fi nevoie de manipulare a codului Jasmin.

Spre deosebire de Kannel, Jasmin nu este probabil potrivit pentru o muncă industrială gravă datorită productivității sale scăzute. Cu toate acestea, Jasmin este un program excelent pentru experimentarea și crearea propriilor programe bazate pe codul Jasmin.







Trimiteți-le prietenilor: