Веб-қосымшалармен хат алмасу хаттамасы - Web Application Messaging Protocol

WAMP Бұл WebSocket тіркелген ішкі протокол ЯНА,[1] арнайы[2] бағыттауды ұсыну RPC және PubSub. Оның дизайн мақсаты[3] бұл қосымшаның компоненттері арасындағы нақты уақыт режиміндегі жұмсақ хабарламалар алмасудың ашық стандартын қамтамасыз ету және құруды жеңілдету еркін байланыстырылған негізделген сәулет микроқызметтер. Осыған байланысты бұл қолайлы кәсіпорынға қызмет көрсету автобусы (ESB),[4] жауап беретін веб-қосымшаларды жасауға немесе бірнеше қосылған құрылғыларды үйлестіруге жарайды IoT.[5]

Сипаттамалары

Құрылым

WAMP қажет[6] сенімді, тапсырыс берілген, толық дуплексті хабар арнасы көлік қабаты, және әдепкі бойынша Websocket-ті қолданады. Алайда, бағдарламалар осы сипаттамаларға сәйкес келетін басқа көлік құралдарын қолдана алады және WAMP-мен байланысады, мысалы. шикі розеткалар,[7] Unix ұялары немесе HTTP сауалнамасы.

Хабар серияландыру болжайды[8] бүтін сандар, жолдар және реттелген реттілік түрлері қол жетімді және әдепкі бойынша JSON оларды ұсынатын ең кең таралған формат ретінде. Іске асырулар көбінесе қамтамасыз етеді MessagePack JSON-қа жылдам балама ретінде, бірақ қосымша тәуелділіктің құны бойынша.[9]

Қашықтағы процедуралар мен PubSub тақырыптарын қақтығыстарсыз анықтау үшін WAMP сонымен қатар ғаламдық тағайындауға және шешуге мүмкіндік беретін ID кеңістігін қажет етеді. Хаттама Веб-тума болғандықтан - WebSocket - артықшылықты тасымалдау - URI қолданылады.

Жұмыс процесі

WAMP клиенттік-клиенттік коммуникациялардың айналасында, олардың арасында хабарламаларды жіберетін, орталық бағдарламалық жасақтамамен, маршрутизатормен құрылымдалған. Мәліметтермен алмасудың типтік жұмыс процесі:[10]

  • Клиенттер маршрутизаторға көлік құралын қолдана отырып, сеанс орнатады.
  • Маршрутизатор клиенттерді анықтайды және оларға ағымдағы сессияға рұқсат береді.
  • Клиенттер маршрутизаторға хабарламаларды жібереді, ол оларды белгіленген мақсаттарға жібереді, олар бекітілген URI мекен-жайларын қолданады.

Клиенттер бұл хабарламаларды RPC және PUB / SUB жоғары деңгейдегі екі примитивті қолданып, төрт негізгі әрекеттесуді орындайды:

  • тіркелу: клиент қашықтан шақырылатын процедураны анықтайды.
  • қоңырау: клиент маршрутизатордан басқа клиенттен ашық процедураның нәтижесін сұрайды.
  • жазылу: клиент тақырыпқа қызығушылығы туралы хабарлайды.
  • жариялау: клиент осы тақырып туралы ақпаратты жариялайды.

Бұл көліктің астына қарай нәзік вариацияға ие болуы мүмкін.[11] Алайда, іске асыру туралы мәліметтер тек RPC және PubSub екі жоғары деңгейлі примитивтері бар бағдарламаларды жасайтын соңғы пайдаланушыға жасырылады.

Қауіпсіздік

WAMP Вебсокетті қолданатындықтан, байланыстарды орауға болады TLS шифрлау үшін. Толған кезде де құпиялылық орнатылмаған, компоненттерді оқшаулау және болдырмау үшін бірнеше тетіктер іске асырылады ортадағы адам шабуылдары. Әдепкі енгізулер тіркелген процедураны тіркеуге тырысудың сәтсіздігіне кепілдік береді.

Маршрутизаторлар облыстарды әкімшілік домендер ретінде анықтай алады, ал клиенттер байланыс кезінде қай салаға қосылғылары келетінін көрсетуі керек. Қосылғаннан кейін, аймақ а ретінде әрекет етеді аттар кеңістігі, аймаққа қосылған клиенттердің RPC және PubSub үшін басқада анықталған идентификаторларды пайдалануына жол бермеу. Пәтерлерде рұқсаттар тіркелген және олар клиенттерді REGISTER / CALL / PubSub әрекеттерінің бір жиынтығымен шектей алады.

Кейбір салаларға тек түпнұсқалық растаманы қолдану сияқты әртүрлі аутентификация әдістерін қолдана отырып, қосыла алады TLS сертификаты, печенье немесе қарапайым билет.

Бағдарланған RPC

Дәстүрлі RPC-ден айырмашылығы, олар тікелей қоңырау шалушыдан процедураны ұсынатын тұлғаға жіберіледі (әдетте сервердің артқы жағы) және қатаң бір бағытты болып табылады (клиенттен серверге дейін), WAMP-дегі RPC орта бағдарламалық қамтамасыздандырумен басқарылады және екі бағытта жұмыс істейді.

RPC тіркеу WAMP маршрутизаторында болады және процедураларға шақырулар WAMP маршрутизаторына ұқсас беріледі. Бұл, ең алдымен, клиент барлық RPC-ді WAMP маршрутизаторына бірыңғай қосылым арқылы шығара алатынын білдіреді және қазіргі уақытта клиент қандай процедураны ұсынып отырғанын, сол клиент қай жерде тұратындығын және оны қалай шешуге болатындығын білуі қажет емес. Бұл шынымен де қоңыраулар арасында өзгеруі мүмкін, бұл процедуралық қоңыраулар үшін жүктемені теңдестіру немесе сәтсіздікке жіберу сияқты кеңейтілген мүмкіндіктерге мүмкіндік береді.

Бұл қосымша WAMP клиенттерінің барлығы қоңырау шалу процедураларын ұсына алатындығымен тең екендігін білдіреді. Бұл клиенттер мен сервердің артқы жағы арасындағы дәстүрлі айырмашылықты болдырмайды және браузердің клиенттері басқа браузер клиенттерінде процедураларды шақыратын архитектураларға мүмкіндік береді, олар API-мен тең дәрежелі байланыс ретінде сезінеді.

Алайда, көп деңгейлі архитектураның өзінде маршрутизатор сәтсіздіктің жалғыз нүктесі болып табылады. Осы себепті, кейбір маршрутизаторларды енгізудің жол карталары кластерлеу мүмкіндіктерін қамтиды.[12]

Іске асыру

Клиенттер

WAMP-тің негізгі мақсаттары веб-қосымшалар және Интернет заттары болғандықтан, алғашқы клиенттерді енгізу осы салаларда жақсы бекітілген тілдерде (тек WAMP v2 клиенттері тізімделген):

Клиенттер кітапханасыТіл
Бұрыштық WAMPJavaScript үшін AngularJS жақтау
AutobahnCppC ++ 11
AutobahnJSJavaScript (браузер және Node.js )
AutobahnPythonPython
батпақтыPython
Net :: WAMPПерл
магистраль.WAMPҮшін JavaScript Backbone.js кітапхана
CppWAMPC ++ 11
ЭрваЭрланг
ДжавампаJava
LoowyЛуа
MDWampМақсат-С
МинионPHP
rx.wampҮшін JavaScript Реакция кітапхана
Ақ жолPHP
WAMP POCOC ++
WampSharpC #
Wampy.jsJavaScript (тек шолғышта)
байланысБарыңыз

WAMP клиентін құру үшін минималды талаптар - розеткаларды пайдалану және JSON-қа серияландыру қабілеттілігі. Осылайша, көптеген заманауи тілдер өздерінің стандартты кітапханаларымен осы талаптарды орындайды. TLS шифрлауы немесе MessagePack сериялануы сияқты тәуелділіктерді қосатын қосымша мүмкіндіктер міндетті емес.

Алайда, WebSocket қосылыстарының тұрақты сипаты блокталмайтын кітапханаларды және асинхронды API. JavaScript, Erlang немесе Go сияқты бір ресми механизмі бар тілдерде бұл мәселе емес. Python немесе PHP сияқты асинхронды бағдарламалауға арналған бірнеше бәсекелес шешімдері бар тілдер үшін бұл клиент авторын экожүйенің белгілі бір бөлігіне міндеттеме жасауға мәжбүр етеді.

Сол себепті бұрынғы жобаларды біріктіру де жұмысты қажет етуі мүмкін. Мысал ретінде, ең танымал Web Python жақтаулары қолданылады WSGI, синхронды API және WSPI жұмысшысының ішінде WAMP клиентін іске қосу сияқты қолмен жұмыс жасайтын адаптерлер қажет тоқу.

Маршрутизаторлар

Маршрутизаторлар техникалық түрде қолданба кодына енгізілуі мүмкін және кейбір клиенттік кітапханалар маршрутизаторды да ұсынады, бұл архитектура спецификациядан бас тартады.[13]

Маршрутизатор қозғалмалы бөлік болғандықтан, оны қолданған жөн[кімге сәйкес? ] айырбастауға болатын қара жәшік ретінде Apache немесе Nginx үшін HTTP:

МаршрутизаторТіл
БондиЭрланг
Crossbar.ioPython (CPython және PyPy )
ЭрваЭрланг
ДжавампаJava
Ақ жолPHP
wamp.rtJavaScript (тек Node.js)
WampSharpC #
ВиолаЛуа
Түнгі өмір-қоянJavaScript (тек Node.js)
байланысБарыңыз

Тавендо, протокол шығарған компания да авторы болып табылады Crossbar.io, ол өзін іс жүзінде маршрутизатордың іске асырылуы ретінде ұсынады.[14] Микроқызметке негізделген архитектураны насихаттайтын болғандықтан, Crossbar.io WAMP қолданбасының компоненттерін, статикалық файл веб-серверін және WSGI контейнерін орналастыру және бақылау үшін қызмет менеджерін қосады. -Мен жазылған Бұралған кітапхана, бұл Nginx сияқты стектерді ауыстыруға бағытталған прокси жоқ өндірісте орнатуға болатын қондырғылардың бірі Жетекшісі және Gunicorn.

Істерді қолданыңыз

WebSocket ішкі протоколы бола отырып, WAMP кез-келген жерде веб-шолғыш сияқты клиенттерді синхрондау, оларға хабарландыру жіберу және пайдаланушылар арасында жұмсақ нақты уақыт режимінде жұмыс істеуге мүмкіндік беру үшін шикі веб-ұяларды қолдана алатын кез келген жерде сәйкес келеді.[15] Сондай-ақ, клиенттің қолдауын қажет ететін бірдей шектеулер бар, ол үшін жетіспейді Internet Explorer 10-нан асқан нұсқалар[16] Бұл бар болуымен азаяды полифильдер[17] сияқты портативті технологияларды қолдана отырып Жарқыл немесе резерв ретінде HTTP Longpoll пайдалану. Бұл тұрғыда WAMP бәсекелес болып табылады Метеор Келіңіздер DDP.

WAMP сонымен бірге IoT-қа бағытталған, мұнда ол дәл осылай қолданылады MQTT[18] байланысты объектілердің кластерлерін ұйымдастыруға жеңіл және тиімді орта ретінде. Әр түрлі тілдердегі бағдарламалар сияқты шағын құрылғыларды басқаруға және бақылауға мүмкіндік береді Таңқурай Pi (Python-да) немесе Tessel[19] (JavaScript-те).

Сонымен, WAMP корпоративті сервистік автобус ретінде жұмыс істей алады және микроқызметтер арасындағы байланыс ретінде қызмет ете алады. Корба, ZeroMQ, Apache үнемдеу, Сабын немесе AMQP.

Эволюция

WAMP қазіргі уақытта 2-нұсқада[20] ол маршрутталған RPC енгізді. Қазіргі уақытта барлық маршрутизаторлар 2-нұсқамен үйлесімді. Кейбір клиенттер: Wamp.io, AutobahnAndroid және cljWAMP.

Сипаттаманың 2-нұсқасы екі бөлікке бөлінеді: негізгі профиль, соның ішінде маршрутизатор RPC және Pub / Sub және қосымша профиль, сенімділік деңгейлері, URI үлгісінің сәйкестігі және клиенттер тізімі. Негізгі профиль тұрақты деп саналады және қазіргі заманғы кітапханалар жетілдірілген профиль әлі дамып келе жатқан кезде жүзеге асырады.

Салыстыру

WAMP веб-сайты мәлімдейді[21] технология үшін келесі сату нүктелері:

  • Native PubSub: терезеден Publish & Subscribe қолдайды (кеңейту қажет емес).
  • RPC: ұяшықтан қашықтағы процедуралық қоңырауларды қолдайды (кеңейту қажет емес).
  • Бағдарланған RPC: бағытталған (тек нүктеден-нүктеге дейін емес) қашықтағы процедуралық қоңырауларды қолдайды.
  • Веб-тума: Интернетте өздігінен жұмыс істейді (туннельсіз және көпірсіз).
  • Айқас тіл: әр түрлі бағдарламалау тілдерінде және жұмыс уақытында жұмыс істейді.
  • Стандартты ашыңыз: Әр түрлі жеткізушілер жүзеге асыратын ашық, ресми сипаттама.

Екінші жағынан, WAMP басқа хаттамалардың кейбір мақсаттарына қол жеткізуге тырыспайды:

  • Толық нысан ұнайды CORBA.
  • DDP сияқты деректерді синхрондау.
  • Тең-теңімен қарым-қатынас сияқты ZeroMQ.
  • Ұқсас мультимедиа WebRTC.
  • HTTP сияқты үлкен файлдарды тасымалдау.

Дегенмен, көптеген хаттамалар WAMP-пен кейбір сипаттамаларды бөліседі:

ТехнологияPubSubRPCБағдарланған RPCВеб-тумаАйқас тілСтандартты ашыңыз
WAMPИәИәИәИәИәИә
AJAXИәИәИә
AMQPИәИәИәИә
Apache үнемдеуИәИә
Капн''ПротоИәИә
Құйрықты жұлдызИәИә
OMG DDSИәИәИә
D-автобусИә
CORBAИәИәИәИә
DCOMИәИәИә
Java JMSИәИә
Java RMIИәИә
JSON-RPCИәИәИәИә
MQTTИәИәИәИәИәИә
ДемалысИәИәИә
СабынИәИәИәИә
Socket.ioИәИә
SockJSИәИә
ТОҚТАТУИәИәИәИә
XML-RPCИәИәИәИә
XMPPИәИәИәИәИә
ZeroMQИәИә
DDP[22]ИәИәИәИә

Дегенмен, DDP деректер жиынтығын синхрондау үшін капюшон астында Pub / Sub жасаса да, PubSub примитивтерін көрсетпейтінін ескеру маңызды. Бұл сонымен қатар бірнеше орындалуы бар, бірақ стандарт ретінде тіркелмеген ашық сипаттама.

Пайдаланылған әдебиеттер

  1. ^ IANA хаттамаларының листинг беті
  2. ^ WAMP профилінің негізгі сипаттамалары
  3. ^ «WAMP-ті қолдана отырып, қолданбалы компоненттерден таралған жүйелер құра аласыз, олар еркін байланысқан және нақты уақыт режимінде (жұмсақ) байланысады».
  4. ^ WAMP туралы бірнеше сөз
  5. ^ Бахга, Аршдип; Мадисетти, Виджей (9 тамыз 2014). Бұл тарауда [...] сіз IoT шешімдерін әзірлеуге арналған құралдар мен қызметтерді ұсынатын веб-қосымшалармен хабар алмасу хаттамасы [...] туралы білесіз.. ISBN  9780996025515.
  6. ^ Crossbar.io маршрутизаторының тасымалы
  7. ^ «WAMP WebSocket-тің орнына шикі тасымалдаудың үстінен жүгіре алады. Әр хабарлама келесі WAMP хабарламасының (серияланған) ұзындығын қамтамасыз ететін uint32 (big endian) префиксімен».
  8. ^ WAMP сериялануы
  9. ^ «Wampy әдепкі сериализаторы - JSON, бірақ ол msgpack-ті сериализатор ретінде қолдайды, бірақ сіз msgpack.js-ті тәуелділік ретінде қосуыңыз керек».
  10. ^ WAMP ішкі бөліктері құстарды қарау схемасы
  11. ^ «Ұзақ сауалнама көлігі WAMP сеансын қарапайым ескі HTTP 1.0 / 1.1 арқылы жібере алады. Мұны HTTP / POST сұрауларын беретін Клиент жүзеге асырады, біреуін жіберуге, екіншісін алуға».
  12. ^ Тірек торабының архитектурасы
  13. ^ «Брокерлер мен дилерлер жалпы қоңыраулар мен іс-шаралардың маршрутизациясы үшін жауап береді және бағдарлама кодын қолданбайды».
  14. ^ «Crossbar.io - ең толыққанды маршрутизатордың атауы».
  15. ^ WAMP және AngularJS
  16. ^ «Веб-қалталарды пайдалануға бола ма?».
  17. ^ Веб-розетканың полифильдері
  18. ^ «Сонымен қатар, біз WAMP-ді басқа тіркелген WebSocket ішкі протоколдарымен (MBWS, SOAP және STOMP) қатысты ерекшеліктер тұрғысынан; және басқа да ықтимал хаттамалармен (CoAP және MQTT) салыстырмалы практикалық орналастырулар тұрғысынан» (PDF).
  19. ^ Crossbar.io бар Tessel дабыл қосымшасы
  20. ^ WAMP 2 сипаттамаларының мәзірі
  21. ^ WAMP салыстырылды
  22. ^ DDP сипаттамалары