ããããAJAXãæäŸããªãã®ã¯ãµãŒããŒã®æŽæ°ã§ããããã¯ãã¢ããªã±ãŒã·ã§ã³ããªã¢ã«ã¿ã€ã ã§åäœããããã«å¿ èŠã§ãã ãŠãŒã¶ãŒã1ã€ã®ããã¥ã¡ã³ããåæã«ç·šéããã¢ããªã±ãŒã·ã§ã³ããæ°çŸäžã®ãã¥ãŒã¹ãªãŒããŒã«éä¿¡ãããéç¥ãªã©ããããŸãã AJAXãªã¯ãšã¹ãã«å ããŠãããŸããŸãªèŠæš¡ã§æ©èœããã¡ãã»ãŒãžãéä¿¡ããã«ã¯ããã1ã€ã®ãã³ãã¬ãŒããå¿ èŠã§ãã ãã®ãããPubSubãã³ãã¬ãŒãïŒãçºè¡ããã³è³Œèªãããçºè¡ããã³è³ŒèªãïŒãåŸæ¥ãã䜿çšãããŠããŸãã
AJAXã¯ã©ã®ãããªåé¡ã解決ããŸãããïŒ
AJAX以åã¯ãããŒãžãšã®ã€ã³ã¿ã©ã¯ãã£ããªããåãã¯å€ãã£ãã ãããã®ããããã¯ããµãŒããŒã§äœæãããããŒãžã®ãªããŒããå¿ èŠãšããŸããã ãã®ã¢ãã«ã§ã¯ãçžäºäœçšã®äž»ãªåäœã¯ããŒãžã§ããã ãã©ãŠã¶ãããµãŒããŒã«éä¿¡ãããæ å ±ã®éã«é¢ä¿ãªããçµæã¯å®å šã«æŽæ°ãããããŒãžã«ãªããŸããã ãã©ãã£ãã¯ãšãµãŒããŒãªãœãŒã¹ã®äž¡æ¹ã®ç¡é§ã§ããã ãŸãããŠãŒã¶ãŒã«ãšã£ãŠã¯æéãããããäžäŸ¿ã§ããã
AJAXã¯ãã¹ãŠã现ååããããšã§åé¡ã解決ããŸãããããŒã¿ãéä¿¡ããç¹å®ã®çµæãååŸããããã«é¢é£ããããŒãžã®éšåã®ã¿ãæŽæ°ããããšãå¯èœã«ãªããŸããã ãæ°ããããŒãžãããããšããåŒã³åºããããç¹å®ã®ããŒã¿èŠæ±ã«ç®ãåããŸããã ãªã¢ãŒãããã·ãŒãžã£ã³ãŒã«ïŒ RPC ïŒãäœæããæ©äŒããããŸãã
ç°¡åãªãŠã§ãæ祚ã®äŸãèããŠã¿ãŸãããã

AJAXã䜿çšããŠãæ祚ã®ã¯ãªãã¯ãåŠçãããšã次ã®ããã«ãªããŸãã
var xhr = new XMLHttpRequest(); xhr.open('get', 'send-vote-data.php'); xhr.onreadystatechange = function() { if(xhr.readyState === 4) { if(xhr.status === 200) { // } else{ alert('Error: '+xhr.status); // } } }
次ã«ãæ祚ã«ãŠã³ã¿ãŒã1ã€ã ãå€æŽããå¿ èŠããããŸãã ããŒãžã®åæç»ããã1ã€ã®DOMèŠçŽ ã®å€æŽã«é²ã¿ãŸããã
ãµãŒããŒã®äœæ¥ãå°ãªããªãããã©ãã£ãã¯ãæžå°ããŸããã ãããŠæãéèŠãªããšã¯ãã€ã³ã¿ãŒãã§ãŒã¹ãããéãæŽæ°ããã䜿çšã®é åãåäžããããšã§ãã
äžè¶³ããŠãããã®
çŸå®ã®äžçã§ã¯ããã®ãããªã¢ããªã±ãŒã·ã§ã³ã¯å€æ°ã®ç¥šã䞊è¡ããŠåãåããŸãã æ祚æ°ã¯ç°ãªããŸãã AJAXãªã¯ãšã¹ãã¯å¯äžã®ã¯ã©ã€ã¢ã³ã/ãµãŒããŒæ¥ç¶ã§ãããããã¢ããªã±ãŒã·ã§ã³ãããŒãããããšãã«ã®ã¿ãŠãŒã¶ãŒã«çµæã衚瀺ãããŸãã ãã®åŸãå€æŽã¯ãŠãŒã¶ãŒã«éä¿¡ãããŸããã
AJAXã¯ããŠãŒã¶ãŒã®ã¢ã¯ã·ã§ã³ã«å¿ããŠããŒãžã®ã¿ãæŽæ°ããŸãã ãµãŒããŒããã®æŽæ°ãåŠçããåé¡ã¯è§£æ±ºããŸããã 圌ã¯ãç§ãã¡ãå¿ èŠãšããããšãã€ãŸããµãŒããŒãããã©ãŠã¶ã«æ å ±ã転éããæ¹æ³ãæäŸããŠããŸããã ãããè¡ãã«ã¯ããŠãŒã¶ãŒã®ä»å ¥ãªãã«ã¯ã©ã€ã¢ã³ãã«æŽæ°ãéä¿¡ããã¡ãã»ãŒãžè»¢éãã³ãã¬ãŒããå¿ èŠã§ãããã¯ã©ã€ã¢ã³ããåžžã«ãµãŒããŒãããŒãªã³ã°ããå¿ èŠã¯ãããŸããã

PubSubïŒ1察å€ã®æŽæ°
ãã®ãããªã¿ã¹ã¯ã®ããã®å®è©ã®ãããã³ãã¬ãŒãã¯PubSubã§ãã ã¯ã©ã€ã¢ã³ãã¯ããµãŒããŒã«äœããã®ãããã¯ïŒãµãã¹ã¯ã©ã€ãïŒã«é¢å¿ãããããšã宣èšããŸãã ã¯ã©ã€ã¢ã³ããã€ãã³ãããµãŒããŒã«éä¿¡ïŒå ¬éïŒãããšããµãŒããŒã¯æ¥ç¶ãããŠãããã¹ãŠã®ã¯ã©ã€ã¢ã³ãã«ã€ãã³ããé åžããŸãã
å©ç¹ã®1ã€ã¯ããããªãã·ã£ãŒãšãµãã¹ã¯ã©ã€ããŒããµãŒããŒã«æ¥ç¶ãããŠããªãããšã§ãã ãããªãã·ã£ãŒã¯çŸåšã®ãµãã¹ã¯ã©ã€ããŒã«ã€ããŠç¥ãå¿ èŠã¯ãªãããµãã¹ã¯ã©ã€ããŒã¯ãããªãã·ã£ãŒã«ã€ããŠç¥ãå¿ èŠã¯ãããŸããã ãããã£ãŠãPubSubã¯ããããã®äž¡æ¹ã«å¯ŸããŠç°¡åã«å®è£ ã§ããæ¡åŒµæ§ã«åªããŠããŸãã
ãã³ãã¬ãŒãã®å®è£ ã¯å€æ°ãããŸãã Node.jsãŸãã¯Rubyã§ã¯ã Fayeã䜿çšã§ããŸãã ãµãŒããŒãä¿æããããªãå Žåã¯ã Pusherãªã©ã®WebãµãŒãã¹ã䜿çšã§ããŸãã
ã¡ãã»ãŒãžãéä¿¡ããããã®2ã€ã®ãã³ãã¬ãŒãã2ã€ã®ãã¯ãããžãŒïŒ
ç¹å®ã®ã¢ããªã±ãŒã·ã§ã³ã®ããŒãºã«é©ããPubSubãã¯ãããžãŒãèŠã€ããã®ã¯éåžžã«ç°¡åã§ãã ãã ããæ祚ãªã©ã®åçŽãªã¢ããªã±ãŒã·ã§ã³ã§ãã£ãŠããRPCãšPubSubã®äž¡æ¹ãå®è£ ããå¿ èŠããããŸããããŒã¿ãšèŠæ±ã®éä¿¡ãããã³æŽæ°ã®åä¿¡ã®äž¡æ¹ã§ãã çŽç²ãªPubSubã䜿çšããå ŽåãAJAXãš
ãã®ã¢ãããŒãã«ã¯æ¬ ç¹ããããŸãã
-2ã€ã®ç°ãªãã¹ã¿ãã¯ãå Žåã«ãã£ãŠã¯2ã€ã®ãµãŒããŒã®ç·šæ
-2ã€ã®ãã³ãã¬ãŒãã®åå¥ã®ã¢ããªã±ãŒã·ã§ã³æ¥ç¶ããµãŒããŒã®å€§ããªè² è·
-ãµãŒããŒã§ã¯ã2ã€ã®ã¹ã¿ãã¯ã1ã€ã®ã¢ããªã±ãŒã·ã§ã³ã«çµ±åããããããçžäºã«èª¿æŽããå¿ èŠããããŸã
-ããã³ããšã³ãã§ãåã
WAMPïŒRPCããã³PubSub
Web Application Messaging ProtocolïŒ WAMP ïŒã¯ãRPCãšPubSubã1ã€ã®ãããã³ã«ã«çµ±åããããšã«ããããããã®åé¡ã解決ããŸãã 1ã€ã®ã©ã€ãã©ãªã1ã€ã®æ¥ç¶ã1ã€ã®APIã
ãããã³ã«ã¯ãªãŒãã³ã§ããããã®ããã«ãã©ãŠã¶ãŒãšNode.jsã®äž¡æ¹ã§æ©èœãããªãŒãã³JavaScriptå®è£ ïŒ Autobahn | JS ïŒããããŸãã ä»ã®èšèªã«ãå®è£ ãããããããµãŒããŒã§PHPãJavaãPythonããŸãã¯Erlangã䜿çšã§ããŸãã

WAMPã©ã€ãã©ãªã¯ããã¯ãšã³ãã ãã§ãªãããã€ãã£ãã¯ã©ã€ã¢ã³ãã«ã䜿çšã§ãããããåããããã³ã«ã§å®è¡ãããŠããWebãšã¯ã©ã€ã¢ã³ããçµã¿åãããããšãã§ããŸãã C ++ã©ã€ãã©ãªã¯ããªãœãŒã¹ãéãããŠããããã€ã¹ã§WAMPã³ã³ããŒãã³ããå®è¡ããã®ã«é©ããŠããŸãã
æ¥ç¶ã¯ããã©ãŠã¶ããããã¯ãšã³ããžã§ã¯ãªããã¡ãã»ãŒãžãé ä¿¡ããWAMPã«ãŒã¿ãŒãçµç±ããŸãã PubSubã®å ŽåããµãŒããŒã®åœ¹å²ãæãããŸãããµãŒããŒã¯ã«ãŒã¿ãŒåãã®ã¡ãã»ãŒãžãå ¬éããæ¢ã«é ä¿¡ããŠããŸãã RPCã®å Žåãããã³ããšã³ãã¯ãªã¢ãŒãããã·ãŒãžã£ãªã¯ãšã¹ããã«ãŒã¿ãŒã«éä¿¡ãããããããã¯ãšã³ãã«ãªãã€ã¬ã¯ãããŠãçµæãè¿ããŸãã
WAMPã®å©ããåããŠãæ祚ã§åé¡ã解決ããæ¹æ³ãèŠãŠã¿ãŸãããã
ã©ã€ãæ祚ã®æŽæ°ïŒWebSocketsããã³WAMP
ç°¡åã«ããããã«ãããã¯ãšã³ããJSã§èšè¿°ãããå¥ã®ã¿ãã§åäœããŸãã ãã©ãŠã¶ã¯ã©ã€ã¢ã³ãã¯ãä»ã®WAMPã¯ã©ã€ã¢ã³ããšåæ§ã«ããªã¢ãŒãã³ãŒã«ã®ããã·ãŒãžã£ãç»é²ã§ããããããã©ãŠã¶ããã¯ãšã³ããå¯èœã§ãã
ãã¢ã®ã³ãŒãã¯ãèµ·åæé ãšãšãã«GitHubã«ãããŸãã Crossbar.ioã¯ã«ãŒã¿ãŒãšããŠäœ¿çšãããŸãã
WAMPã©ã€ãã©ãªæ¥ç¶
ãŸããã¢ãŠãããŒã³| JSã©ã€ãã©ãªãæ¥ç¶ããŸãã
ãããå®èšŒããããã«ã次ã®ããã«æ¥ç¶ã§ããŸãïŒ
<script src="https://autobahn.s3.amazonaws.com/autobahnjs/latest/autobahn.min.jgz"></script>;
æ¥ç¶ã確ç«ãã
var connection = new autobahn.Connection({ url: "ws://example.com/wamprouter", realm: "votesapp" });
æåã®åŒæ°ã¯ã«ãŒã¿ãŒURLã§ãã WAMPã¯WebSocketãããã©ã«ãã®ãã©ã³ã¹ããŒããšããŠäœ¿çšãããããwsã¹ããŒã ã䜿çšãããŸãã ããã«ãéä¿¡äžã«HTTPããããŒãéä¿¡ãããªãããããã©ãã£ãã¯ãæžå°ããŸãã WebSocketã¯ãã¹ãŠã®ææ°ãã©ãŠã¶ãŒã§ãµããŒããããŠããŸã ã
èšå®ãã2çªç®ã®åŒæ°ã¯ããã¬ã«ã ããã€ãŸãæ¥ç¶ãçµåããã¹ããŒã¹ã§ãã ã¹ããŒã¹ã¯ããµãŒããŒäžã®ã«ãŒãã£ã³ã°çšã«åå¥ã®ãã¡ã€ã³ãäœæããŸããã€ãŸããã¡ãã»ãŒãžã¯1ã€ã®ã¹ããŒã¹å ã§ã®ã¿éä¿¡ãããŸãã
äœæããããªããžã§ã¯ãã䜿çšãããšã2ã€ã®ã³ãŒã«ããã¯ãæ¥ç¶ã§ããŸãã1ã€ã¯æ¥ç¶ã«æåãããã1ã€ã¯æ¥ç¶ã«å€±æããæ¥ç¶ãäžæããç¬éã«æ¥ç¶ããŸãã
onopenãã³ãã©ãŒã¯ãæ¥ç¶ã確ç«ããããã«åŒã³åºãããã»ãã·ã§ã³ãªããžã§ã¯ããåãåããŸãã ãããã¢ããªã±ãŒã·ã§ã³ã®æ©èœãå«ãã¡ã€ã³é¢æ°ã«æž¡ããŸãã
connection.onopen = function (session, details) { main(session); };
次ã«ãæ¥ç¶ãéãå¿ èŠããããŸãã
connection.open();
ããã·ãŒãžã£ãç»é²ããŠåŒã³åºã
ããã³ããšã³ãã¯æ祚ãéä¿¡ããããã¯ãšã³ãã§ããã·ãŒãžã£ãåŒã³åºããŸãã éä¿¡ãããé³å£°ãåŠçããæ©èœãå®çŸ©ããŸãã
var submitVote = function(args) { var flavor = args[0]; votes[flavor] += 1; return votes[flavor]; };
圌女ã¯æ祚æ°ãå¢ããããã®æ°ãè¿ããŸãã
次ã«ãWAMPã«ãŒã¿ãŒã«ç»é²ããŸãã
session.register('com.example.votedemo.vote', submitVote)
ããããããšã§ãã³ãŒã«ã«äœ¿çšãããäžæã®èå¥åã圌女ã«å²ãåœãŠãŸãã ãã®ãããWAMPã¯Javaããã±ãŒãžãšããŠURIã䜿çšããŸãã
ããã§ãsubmitVoteé¢æ°ãåãã¹ããŒã¹ããèš±å¯ãããã¯ã©ã€ã¢ã³ãããåŒã³åºãããšãã§ããŸãã åŒã³åºãã¯æ¬¡ã®ããã«ãªããŸãã
session.call('com.example.votedemo.vote',[flavor]).then(onVoteSubmitted)
submitVoteãè¿ããã®ã¯ãonVoteSubmittedãã³ãã©ãŒã«æž¡ãããŸãã
Autobahn | JSã¯ãéåžžã®ã³ãŒã«ããã¯ãéããŠãããè¡ããŸããã promisesã䜿çšãããšãsession.callã¯ãåŒã³åºããè¿ãããå®è¡ããããã³ãã©ãŒé¢æ°ãå®è¡ããããšãã«å®è¡ããããªããžã§ã¯ããããã«è¿ããŸãã
WAMPãšAutobahn | JSãç°¡åã«äœ¿çšããå ŽåãçŽæã«ã€ããŠäœãç¥ãå¿ èŠã¯ãããŸããã ããããå¥ã®ã³ãŒã«ããã¯ã¬ã³ãŒããšèŠãªãããšãã§ããŸãã
æŽæ°ã賌èªããŠéä¿¡ãã
ä»ã®ã¯ã©ã€ã¢ã³ãã®æŽæ°ã¯ã©ãã§ããïŒ æŽæ°ãåä¿¡ããã«ã¯ãã¯ã©ã€ã¢ã³ãã¯ã«ãŒã¿ãŒã«å¿ èŠãªæ å ±ãäŒããå¿ èŠããããŸãã ãããè¡ãã«ã¯ïŒ
session.subscribe('com.example.votedemo.on_vote', updateVotes);
æ å ±ãåãåããã³ã«åŒã³åºããããããã¯ãšé¢æ°ãæž¡ããŸãã
ãµãŒããŒããã®æŽæ°ã®éä¿¡ãæ§æããããã«ã®ã¿æ®ããŸãã å¿ èŠãªãããã¯ã«é¢ããæ å ±ãéä¿¡ããã³å ¬éããããã®ãªããžã§ã¯ããäœæããŸãã 以åã«ç»é²ããsubmitVoteã«ãã®æ©èœãè¿œå ããŸãã
var submitVote = function(args, kwargs, details) { var flavor = args[0]; votes[flavor] += 1; var res = { subject: flavor, votes: votes[flavor] }; session.publish('com.example.votedemo.on_vote', [res]); return votes[flavor]; };
ããã ãã§ããããã¯ãšã³ãã«æ祚ãéä¿¡ããæ¥ç¶ãããŠãããã¹ãŠã®ãã©ãŠã¶ã®æ祚ãæŽæ°ãããšãåããããã³ã«ã§åäœããŸãã
ãŸãšã
WAMPã¯ã¡ãã»ãŒãžã³ã°ãçµ±åããŸãã RPCãšPubSubã¯ããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã¿ã¹ã¯ã«ååãªã¯ãã§ãã ãã®ãããã³ã«ã¯ããµãŒããŒãžã®é«éã§åäžã®åæ¹åæ¥ç¶ã§ããWebSocketãä»ããŠæ©èœããŸãã WAMPãããã³ã«ã¯ãªãŒãã³ã§ãããããŸããŸãªèšèªã®å®è£ ãæ¢ã«ååšãããããããã¯ãšã³ãã§äœ¿çšããæè¡ãèªç±ã«éžæã§ããWebã ãã§ãªããã€ãã£ãã¯ã©ã€ã¢ã³ãçšã®ã¢ããªã±ãŒã·ã§ã³ãäœæããããšããã§ããŸãã
泚é
ã æ祚 ããCrossbar.io- æ祚ã®çŸåšã®ããŒãžã§ã³
â ãªãWAMPãªã®ãïŒ ããWAMP-ãããã³ã«éçºããŒã
ã ã³ãŒãã解æŸããŠãã ããïŒãã©ãŠã¶ã§ã®ããã¯ãšã³ããAlexanderGöddeãTavendo-ãããã³ã«ã®å¯Ÿç§°æ§ãå±éã«äžãã圱é¿ã«é¢ããèšäº
â WebSocketsïŒãªããäœã䜿çšã§ããŸããïŒ ããAlexanderGöddeãTavendo-WebSocketã®æŠèŠ
ã WAMP Compared ããWAMP-ä»ãšã®ãããã³ã«æ¯èŒ
Crossbar.io-ã¢ããªã±ãŒã·ã§ã³ã§ã®ãŠãããŒãµã«ã«ãŒã¿ãŒã®äœ¿çšã®æŠèŠ