ãããžã§ã¯ãã¯ãTornadoéåæWebãµãŒããŒã䜿çšããŠPythonã§èšè¿°ãããŠããŸãã ãµã€ãã®ããã¯ãšã³ããPythonã§æžãããŠããªãå Žåã§ã䜿çšã§ããŸãã çŸæç¹ã§ã®é å¿åé¢æ©ã«ã€ããŠã話ããããšæããŸãã
Pythonããã±ãŒãžã®ã€ã³ã¹ããŒã«ã«ç²ŸéããŠããå Žåãå®éã«ãããžã§ã¯ããè©Šãã®ã¯ç°¡åã§ãã virtualenvå ïŒ
$ pip install centrifuge
æã¡äžãïŒ
$ centrifuge
ãã®åŸãéå§ããã°ããã®Centrifugeããã»ã¹ã®ç®¡çã€ã³ã¿ãŒãã§ãŒã¹ãhttpïŒ// localhostïŒ8000ã§å©çšå¯èœã«ãªããŸãã
ãã®èšäºã®ããã«ã Heroku-habrifuge.herokuapp.com㧠Centrifugeã€ã³ã¹ã¿ã³ã¹ãèµ·åããŸãã ã ãã¹ã¯ãŒãã¯habrahabrã§ãã ããªãã®èª å®ããšæ éããé¡ã£ãŠããŸã-ãã¢ã¯ããã¹ãŠãå£ããä»ã®äººããããžã§ã¯ããè©äŸ¡ããã®ã劚ããè©Šã¿ãã決ããŠä¿è·ãããŸããã ãã¹ãŠã®çµæãæã€ç¡æã®æç«ã§èµ·åããŸããã ãã¡ãããHerokuã¯ãã®çš®ã®ã¢ããªã±ãŒã·ã§ã³ããã¹ãããã®ã«æé©ãªå Žæã§ã¯ãããŸãããããã¢ã³ã¹ãã¬ãŒã·ã§ã³ã®ç®çã®ããã«ã¯æé©ã§ãã
å°ãªããšãPythonã®ãªãŒãã³ãœãŒã¹ã®äžçã§ã¯ãCentrifugeã®é¡äŒŒç©ã¯ãªããšèšããªããç§ã¯çå®ããããã»ã©é ããªããšæããŸãã ç§ãããæãçç±ã説æããããšæããŸãã ãªã¢ã«ã¿ã€ã ã€ãã³ãããµã€ãã«è¿œå ããæ¹æ³ã¯å€æ°ãããŸãã æãæµ®ãã¶ãã®ããïŒ
- èªç«åéåæãµãŒããŒã
- ã¯ã©ãŠããµãŒãã¹ïŒpusher.comãpubnub.comïŒ;
- geventïŒgunicornãuwsgiïŒ;
- Nginxã¢ãžã¥ãŒã«/æ¡åŒµæ©èœã
- BOSHãXMPPã
JavaScriptã«ã¯MeteorããããDerbyã¯ãŸã£ããç°ãªãã¢ãããŒãã§ãã ãŸãããã°ãããFayeããããŸããããã¯ãJavaScriptãŸãã¯Rubyããã¯ãšã³ããšã·ãŒã ã¬ã¹ã«çµ±åããããµãŒããŒã§ãã ããããããã¯NodeJSãšRubyã®ãœãªã¥ãŒã·ã§ã³ã§ãã é å¿åé¢æ©ã¯ãäžèšã®ã¢ãããŒãã®æåãå®è¡ããŸãã ã¹ã¿ã³ãã¢ãã³ã®éåæãµãŒããŒïŒããã³ã¯ã©ãŠããµãŒãã¹ïŒã®å©ç¹ã¯ãæ¢åã®ããã¯ãšã³ãã®ã³ãŒããšå²åŠãå€æŽããå¿ èŠããªãããšã§ããããã¯ãããšãã°æšæºã®Pythonã©ã€ãã©ãªã«ããããé©çšãããªã©ãGeventã䜿çšããããšã決å®ãããšããã«çºçããŸãã å¥åã®ãµãŒããŒã䜿çšããã¢ãããŒãã«ãããæ¢åã®ããã¯ãšã³ãã¢ãŒããã¯ãã£ã«ãªã¢ã«ã¿ã€ã ã¡ãã»ãŒãžãç°¡åãã€ç°¡åã«çµ±åã§ããŸãã
çæ-åæ§ã®ã¢ãŒããã¯ãã£ã®åºåã¯ãå°ããåãæšãŠãããããªã¢ã«ã¿ã€ã ã§ããããšãå€æããŸããã Webã¢ããªã±ãŒã·ã§ã³ã¯ãã€ãã³ããçæããã¯ã©ã€ã¢ã³ãããã®HTTPãªã¯ãšã¹ãã«èããå¿ èŠããããŸããæ°ããã€ãã³ãã¯æåã«ããã¯ãšã³ãã«å°éããæ€èšŒãããå¿ èŠã«å¿ããŠããŒã¿ããŒã¹ã«ä¿åããããã®åŸã®ã¿Centrifugeã«éä¿¡ãããŸãïŒpusher.comãpubnub.comããã®ä»ïŒã ãã ããã»ãšãã©ã®å Žåããã®å¶éã¯Webã®ã¿ã¹ã¯ã«ã¯åœ±é¿ããŸããã1人ã®ã¯ã©ã€ã¢ã³ããéåžžã«å€ãã®ã€ãã³ããçæããåçãªãªã¢ã«ã¿ã€ã ã²ãŒã ã¯ããã®åé¡ã®åœ±é¿ãåããå¯èœæ§ããããŸãã ãã®ãããªå Žåãããããããªã¢ã«ã¿ã€ã ã¢ããªã±ãŒã·ã§ã³ãšããã¯ãšã³ãã®ç·å¯ãªçµ±åãå¿ èŠã§ããããããgevent-socketioã®ãããªãã®ã§ãã ãµã€ãäžã®ã€ãã³ããã¯ã©ã€ã¢ã³ãã§ã¯ãªããããã¯ãšã³ãèªäœã«ãã£ãŠçæãããå Žåããã®å Žåãäžèšã®æ¬ åŠã¯åœ¹å²ãæãããŸããã
Pythonã®ãªãŒãã³ãœãŒã¹ã®äžçã«ã¯Centrifugeã®é¡äŒŒç©ããªããšèšã£ãŠããWebãœã±ãããšããªãã£ã«ãä»ããŠã¡ãã»ãŒãžãéä¿¡ããã¹ã¿ã³ãã¢ãã³ãµãŒããŒã®å®è£ ãä»ã«ãªããšããæå³ã§ã¯ãããŸããã ç®±ããåºããŠãå®éã«äœ¿çšããã»ãšãã©ã®åé¡ã解決ãããããªãããžã§ã¯ãã¯èŠã€ãããŸããã§ããã
æ€çŽ¢ãšã³ãžã³ã python real-time github ããšå ¥åãããšãåæ§ã®ãµãŒããŒã®äŸãžã®ãªã³ã¯ãå€æ°è¡šç€ºãããŸãã ãããïŒ ãããã®çµæã®ã»ãšãã©ã¯ãåé¡ã解決ããããã®ã¢ãããŒãã瀺ããŠããã ãã§ãããããã«æ·±ããªãããšã¯ãããŸããã 1ã€ã®ããã»ã¹ãæ¬ èœããŠãããããäœããã®æ¹æ³ã§ã¢ããªã±ãŒã·ã§ã³ãã¹ã±ãŒãªã³ã°ããå¿ èŠããããŸã-ãããžã§ã¯ãããã¥ã¡ã³ãã§ããã®ç®çã§PUB / SUBãããŒã«ãŒã䜿çšããå¿ èŠããããšèšãããŠããå Žå-RedisãZeroMQãRabbitMQ-ããã¯äºå®ã§ãããèªåã§å®è£ ããå¿ èŠããããŸã å€ãã®å Žåããã®ãããªäŸã¯ãã¹ãŠãæ°ããæ¥ç¶ãªããžã§ã¯ããè¿œå ããããã®æ¥ç¶ã»ãããããã¹ãŠã®ã¯ã©ã€ã¢ã³ãã«æ°ããã¡ãã»ãŒãžãéä¿¡ããããã¿ã€ãã»ããã®ã¯ã©ã¹å€æ°ã«éå®ãããŸãã
é å¿åé¢æ©ã®äž»ãªç®æšã¯ãçŸå®äžçã®åé¡ãããã«è§£æ±ºã§ããããã«ããããšã§ãã 詳现ã«å¯ŸåŠããå¿ èŠãããããã€ãã®ãã€ã³ããèŠãŠã¿ãŸãããã
ããªãã£ã«
Webãœã±ããã ãã§ã¯ååã§ã¯ãããŸããã ä¿¡ããããªãå Žåã¯ãSocket.ioã®éçºè ã®1人ãããWebsucketsããšããååã§è©±ãèããŠã¿ãŠãã ããã ããã«ã¹ã©ã€ãããããŸãã ãããŠãããã«ãããªããããŸãïŒãã¡ãããWebãœã±ããã®äœ¿çšãéèŠãªãããžã§ã¯ãïŒåã³ãåçãªãªã¢ã«ã¿ã€ã ã²ãŒã ïŒããããŸãã é å¿åé¢æ©ã¯SockJSã䜿çšããŠãå€ããã©ãŠã¶ãŒã®Webãœã±ããããšãã¥ã¬ãŒãããŸãã ããã¯ãxhr-streamingãiframe-eventsourceãiframe-htmlfileãxhr-pollingãjsonp-pollingãªã©ã®ãã©ã³ã¹ããŒãã䜿çšããŠIE7ãŸã§ã®ãã©ãŠã¶ãŒããµããŒãããããšãæå³ããŸãã ãã®ããã«ãSockJSãµãŒããŒã®çŽ æŽãããå®è£ -sockjs-tornadoã䜿çšãããŸãã
ãŸãããã¯ãªãŒã³ããªWebãœã±ããã䜿çšããŠãSockJSãããã³ã«ã§ã®å¯Ÿè©±ãã©ããããã«é å¿åé¢æ©ã«æ¥ç¶ã§ããããšã«ã泚æããŠãã ããã
ãªããžããªã«ã¯ãã·ã³ãã«ã§çŽæçãªAPIãåããJavaScriptã¯ã©ã€ã¢ã³ãããããŸãã
ã¹ã±ãŒãªã³ã°
è€æ°ã®ããã»ã¹ãéå§ã§ããŸã-ãããã¯Redis PUB / SUBã䜿çšããŠçžäºã«éä¿¡ããŸãã é å¿åé¢æ©ã¯ãäœçŸäžäººãã®èšªåè ããã巚倧ãªãµã€ãå ã«èšçœ®ããããµããããŠããªãããšã«æ³šæãããã ããããããã®ãããªãããžã§ã¯ãã§ã¯ãåãã¯ã©ãŠããµãŒãã¹ãŸãã¯ç¬èªã®éçºãšããå¥ã®ãœãªã¥ãŒã·ã§ã³ãèŠã€ããå¿ èŠããããŸãã ãããã倧å€æ°ã®ãããžã§ã¯ãã§ã¯ãRedisã®PUB / SUBã¡ã«ããºã ã§æ¥ç¶ããããã©ã³ãµãŒã®èåŸã«ããããã€ãã®ãµãŒããŒã€ã³ã¹ã¿ã³ã¹ã§ååã§ãã ããšãã°ã1ã€ã®ã€ã³ã¹ã¿ã³ã¹ïŒãã®å Žåã¯Redisã¯äžèŠïŒããããå¹³åã¡ãã»ãŒãžéä¿¡æéã50ããªç§æªæºã§ã1000ã®åææ¥ç¶ã«åé¡ãªãèããããšãã§ããŸããã¡ãªã¿ã«ãMail.Ru Groupã€ã³ãã©ãããã§äœ¿çšãããŠããCentrifugeã®1é±éã®æäœçšã®Graphiteã®ã°ã©ãã¡ã€ãã次ã«ç€ºããŸãã éãç·ã¯ã¢ã¯ãã£ããªæ¥ç¶ã®æ°ãç·ã®ç·ã¯ããªç§åäœã®ã¡ãã»ãŒãžéä¿¡ã®å¹³åæéã§ãã çãäžã¯é±æ«ã§ãã :)
èªèšŒãšæ¿èª
é å¿åé¢æ©ã«æ¥ç¶ããããšã«ããããããžã§ã¯ãã®ç§å¯éµã«åºã¥ã察称æå·åã䜿çšããŠããŒã¯ã³ïŒHMACïŒãçæããŸãã ãã®ããŒã¯ã³ã¯æ¥ç¶æã«æ€èšŒãããŸãã ãŸããæ¥ç¶ãããšããŠãŒã¶ãŒIDãšããªãã·ã§ã³ã§ãŠãŒã¶ãŒã«é¢ããè¿œå æ å ±ãéä¿¡ãããŸãã ãããã£ãŠãé å¿åé¢æ©ã¯ããã©ã€ããŒããã£ãã«ãžã®æ¥ç¶ãåŠçããããã«ãŠãŒã¶ãŒã«ã€ããŠååã«èªèããŠããŸãã ãã®ã¡ã«ããºã ã¯ãæ¬è³ªçã«JWT ïŒJSON Web TokenïŒãšéåžžã«ãã䌌ãŠããŸããæè¿ã®é©æ°ã®1ã€ã«æ³šç®ããããšæããŸãã 以åã®èšäºã§è¿°ã¹ãããã«ãã¯ã©ã€ã¢ã³ãããã©ã€ããŒããã£ãã«ããµãã¹ã¯ã©ã€ããããšãCentrifugeã¯ã¢ããªã±ãŒã·ã§ã³ã«POSTãªã¯ãšã¹ããéä¿¡ãããã®ãããªIDãæã€ãŠãŒã¶ãŒãç¹å®ã®ãã£ãã«ã«æ¥ç¶ã§ãããã©ãããå°ããŸãã ããã§ããµãã¹ã¯ãªãã·ã§ã³æã«ãWebã¢ããªã±ãŒã·ã§ã³ããŸã£ããé¢äžããªããã©ã€ããŒããã£ãã«ãäœæã§ããŸãã ãã£ã³ãã«ã«å¥œããªååãä»ããæåŸã«ç¹æ®æåïŒã®åŸã«ããã®ãã£ã³ãã«ã®è³Œèªãèš±å¯ãããŠãããŠãŒã¶ãŒã®IDãèšè¿°ããŸãã ID 42ã®ãŠãŒã¶ãŒã®ã¿ããã®ãã£ã³ãã«ã«ãµãã¹ã¯ã©ã€ãã§ããŸãã
news#42
ãããŠãããªãã¯ãã®ããã«ãããããããšãã§ããŸãïŒ
dialog#42,56
ããã¯ãID 42ããã³56ã®2人ã®ãŠãŒã¶ãŒåãã®ãã©ã€ããŒããã£ãã«ã§ãã
æè¿ã®ããŒãžã§ã³ã§ã¯ãæ¥ç¶ã®æå¹æéã¡ã«ããºã ãè¿œå ãããŸãã-ã»ãšãã©ã®ãããžã§ã¯ãã§ã¯å¿ èŠãªããããããã©ã«ãã§ã¯ãªãã«ãªã£ãŠããŸãã ãã®ã¡ã«ããºã ã¯å®éšçã§ãããšèããã¹ãã§ãã
ããããããããžã§ã¯ãéçºã®éçšã§ã2ã€ã®æãé£ãã決å®ããããŸããïŒè€æ°ã®ããã»ã¹éã§ç¶æ ãåæããæ¹æ³ïŒæçµçã«ãRedisã䜿çšããæãç°¡åãªæ¹æ³ãéžæãããŸããïŒãšãéã¢ã¯ãã£ãåïŒçŠæ¢ãåé€ïŒãããåã«é å¿åé¢æ©ã«æ¥ç¶ããã¯ã©ã€ã¢ã³ãã®åé¡Webã¢ããªã±ãŒã·ã§ã³ã
ããã§ã®é£ç¹ã¯ãCentrifugeããããžã§ã¯ãèšå®ãšãããžã§ã¯ãåå空é以å€ã®ãã¹ãŠãæ°žç¶çãªã¹ãã¬ãŒãžã«ä¿åããªãããšã§ãã ãã®ãããç¡å¹ãªã¯ã©ã€ã¢ã³ãã確å®ã«åæããæ¹æ³ãèãåºãå¿ èŠããããŸããããCentrifugeããã³Webã¢ããªã±ãŒã·ã§ã³ã®ããŠã³ã¿ã€ã ãçºçããå¯èœæ§ãããããããããã®ã¯ã©ã€ã¢ã³ãã®èå¥åãŸãã¯ããŒã¯ã³ãä¿åããæ©èœã¯ãããŸããã§ããã ãã®æ¹æ³ã¯æçµçã«çºèŠãããŸããã ãã ããå®éã®ãããžã§ã¯ãã«é©çšããããšã¯ãŸã å¯èœã§ãªããããå®éšçãªç¶æ ã§ãã 解決çãçè«çã«ã©ã®ããã«æ©èœãããã説æããããšããŸãã
åã«èª¬æããããã«ããã©ãŠã¶ãŒããCentrifugeã«æ¥ç¶ããã«ã¯ãæ¥ç¶ã¢ãã¬ã¹ã«å ããŠãããã€ãã®å¿ é ãã©ã¡ãŒã¿ãŒïŒçŸåšã®ãŠãŒã¶ãŒIDãšãããžã§ã¯ãIDïŒãæž¡ãå¿ èŠããããŸãã ãŸããæ¥ç¶ãã©ã¡ãŒã¿ãŒã«ã¯ãWebã¢ããªã±ãŒã·ã§ã³ã®ããã¯ãšã³ãã«ãããããžã§ã¯ãã®ç§å¯éµã«åºã¥ããŠçæãããHMACããŒã¯ã³ãå¿ èŠã§ãã ãã®ããŒã¯ã³ã¯ãã¯ã©ã€ã¢ã³ãããæž¡ããããã©ã¡ãŒã¿ãŒã®æ£ç¢ºæ§ã確èªããŸãã
åé¡ã¯ã以åã«ãã®ãããªããŒã¯ã³ãåãåã£ãã¯ã©ã€ã¢ã³ãã¯ãåé¡ãªãå°æ¥ããŒã¯ã³ã䜿çšã§ããããšã§ããã€ãŸãããããªãã¯ãã£ãã«ã«ãµãã¹ã¯ã©ã€ãããããããã¡ãã»ãŒãžãèªã¿åããŸãã ã¡ãã»ãŒãžã¯æåã«ããã¯ãšã³ããééãããããæžããªãããšããå§ãããŸãïŒ ããã¯ãå€ãã®å ¬éãµã€ãã®éåžžã®ç¶æ³ã§ãã ãã ããè¿œå ã®ããŒã¿ä¿è·ã¡ã«ããºã ãå¿ èŠã§ãããšç¢ºä¿¡ããŸããã
ãã®ãããæ¥ç¶æã«å¿ èŠãªãã©ã¡ãŒã¿ãŒã®äžã§ã
timestamp
ãã©ã¡ãŒã¿ãŒã衚瀺ãããŸããã ãããã¯Unixç§ïŒ
str(int(time.time()))
ïŒã§ãã ãã®
timestamp
ãããŒã¯ã³çæã«ãé¢ä¿ããŸãã ã€ãŸããæ¥ç¶ã¯æ¬¡ã®ããã«ãªããŸãã
var centrifuge = new Centrifuge({ url: 'http://localhost:8000/connection', token: 'TOKEN', project: 'PROJECT_ID', user: 'USER_ID', timestamp: '1395086390' });
ãããžã§ã¯ãã®èšå®ã«ã質åã«çãããªãã·ã§ã³ã衚瀺ãããŸãããæ°ããæ¥ç¶ãæ£ãããšèŠãªãããç§æ°ã§ãã é å¿åé¢æ©ã¯ãæéåãã®ååç©ãå®æçã«æ€çŽ¢ããæ€èšŒã®ããã«ç¹å¥ãªãªã¹ãïŒå®éã«èšå®ïŒã«è¿œå ããŸãã äžå®ã®æéééã§ãCentrifugeã¯æ€èšŒãå¿ èŠãšãããŠãŒã¶ãŒIDã®ãªã¹ããšãšãã«ã¢ããªã±ãŒã·ã§ã³ã«POSTãªã¯ãšã¹ããéä¿¡ããŸãã å¿çããã¢ããªã±ãŒã·ã§ã³ã¯ããã®ãã§ãã¯ã«åæ Œããªãã£ããŠãŒã¶ãŒIDã®ãªã¹ããéä¿¡ããŸãããããã®ã¯ã©ã€ã¢ã³ãã¯ããã«é å¿åé¢æ©ãã匷å¶çã«åæãããã¯ã©ã€ã¢ã³ãåŽã§èªååæ¥ç¶ã¯è¡ãããŸããã
ããããããã»ã©åçŽã§ã¯ãããŸããã ã¯ã©ã€ã¢ã³ãã®JavaScriptãªã©ãä¿®æ£ãããæ»æè ãã¯ã匷å¶çã«è¿œãåºãããåŸãããã«åæ¥ç¶ããå¯èœæ§ããããŸãã æ¥ç¶ãã©ã¡ãŒã¿ã®
timestamp
ããŸã æå¹ãªå Žåãæ¥ç¶ã¯åãå ¥ããããŸãã ãã ãã次ã®æ€èšŒãµã€ã¯ã«ã§ã¯ãæ¥ç¶ã®æå¹æéãåããåŸãåãã¡ã«ããºã ã«ãã£ãŠãã®IDãWebã¢ããªã±ãŒã·ã§ã³ã«éä¿¡ããããŠãŒã¶ãŒã¯ç¡å¹ã§ãããšèšããããã®åŸã¯æ°žä¹ ã«åæãããŸãïŒ
timestamp
ãæ¢ã«åããŠããããïŒã ã€ãŸããã¯ã©ã€ã¢ã³ããå ¬å ±ãã£ã³ãã«ããèªã¿ç¶ããæ©äŒãããæéã«ã¯ããããªã®ã£ããããããŸãã ãããããã®å€ã¯èšå®å¯èœã§ã-å®éã®éã¢ã¯ãã£ãåã®åŸããŠãŒã¶ãŒããã°ããã®éãã£ã³ãã«ããã¡ãã»ãŒãžãèªãããšãã§ãããªããããã¯ãŸã£ããæããªããšæããŸãã
ãããããã¹ããŒã ã䜿çšãããšããã®ã¡ã«ããºã ãç解ããã®ãã¯ããã«ç°¡åã«ãªããŸãã
å±éãã
ãªããžããªã«ã¯ãCentrifugeã®å±éã«äœ¿çšããå®éã®æ§æãã¡ã€ã«ã®äŸããããŸãã ã¹ãŒããŒãã€ã¶ãŒïŒç£ç£è ïŒã®äžã§Nginxã®CentOS 6ã§å®è¡ããŸãã ä»æ§ãã¡ã€ã«ããããŸã-CentOSãããã°ãããã«åºã¥ããŠrpmããã«ãã§ããŸããã¢ãã¿ãªã³ã°
Centrifugeã®ææ°ããŒãžã§ã³ã«ã¯ãããŸããŸãªã¡ããªãã¯ãUDPçµç±ã§Graphiteã«ãšã¯ã¹ããŒãããæ©èœããããŸãã ã¡ããªãã¯ã¯ãStatsDã®ããã«ãæå®ã®æéééã§éçŽãããŸãã ããã¹ãã®äžã«ã¯ãGraphiteã®ã°ã©ããå«ãç»åããããŸãããé å¿åé¢æ©ã«é¢ãã以åã®èšäºã§ãZeroMQã䜿çšããŠããããšãäŒããŸããã ã³ã¡ã³ãã¯å šäŒäžèŽã§ãã-ZeroMQã¯äžèŠã§ããRedisã䜿çšããŠãã ãããRedisã®ããã©ãŒãã³ã¹ã¯é ã§ååã§ãã æåã¯å°ãèããŠãRedisããªãã·ã§ã³ã®PUB / SUBããã¯ãšã³ããšããŠè¿œå ããŸããã ãããŠããã®ãã³ãããŒã¯ããããŸããïŒ
æ¬åœã«é©ããŸããã ãªãZeroMQãRedisãããç§ã®ã¿ã¹ã¯ã«ãšã£ãŠããã»ã©æªãã®ã§ããïŒ ãã®è³ªåã«å¯ŸããçããããããŸããã ã€ã³ã¿ãŒããããæ€çŽ¢ããåŸãèè ã¯ZeroMQãé«éã®ãªã¢ã«ã¿ã€ã Webã«é©ããŠããªããšæå¥ãèšã£ãŠããèšäºãèŠã€ããŸããã æ®å¿µãªãããç§ã¯ãã§ã«ãã®èšäºãžã®ãªã³ã¯ã倱ã£ãŠããŸãã ãã®çµæãZeroMQã¯Centrifugeã§äœ¿çšãããªããªããã¡ã¢ãªãšRedisã®2ã€ã®ãšã³ãžã³ã®ã¿ãæ®ããŸãïŒæåã¯Centrifugeã®1ã€ã®ã€ã³ã¹ã¿ã³ã¹ãå®è¡ããRedisãšãã®PUB / SUBãäžèŠãªå Žåã«é©ããŠããŸãïŒã
äžèšã®gifã§ãããããã«ãWebã€ã³ã¿ãŒãã§ã€ã¹ã¯æ¶ããŠããŸããããããžã§ã¯ãã®äœæãèšå®ã®å€æŽãããã³äžéšã®ãã£ãã«ã§ã®ã¡ãã»ãŒãžã®ç£èŠã«åŒãç¶ã䜿çšãããŠããŸãã ãããä»ããŠãããšãã°ã¡ãã»ãŒãžãçºè¡ãããªã©ãã³ãã³ããé å¿åé¢æ©ã«éä¿¡ããããšãã§ããŸãã äžè¬çã«ãããã¯ä»¥åã§ããããçªç¶ããªããç¥ããªãå Žåãç§ã¯ãããç¹°ãè¿ãããšã«ããŸããã
ä»ã®å€æŽããïŒ
- BSDã®ä»£ããã«MITã©ã€ã»ã³ã¹ã
- åå空éã®ãªãã¡ã¯ã¿ãªã³ã°ïŒããã¯ããããã³ã«ã®åå¥ã®ãšã³ãã£ãã£ãšãã£ãŒã«ãã§ã¯ãªããã³ãã³ïŒ
public:news
ïŒã§åºåããããã£ãã«åã®åãªããã¬ãã£ãã¯ã¹ã§ãã - JavaScriptã¯ã©ã€ã¢ã³ãã®æ¹åã
- ujsonã¢ãžã¥ãŒã«ãè¿œå ã€ã³ã¹ããŒã«ãããšãJSONã§ã®äœæ¥ãå€§å¹ ã«é«éåã§ããŸãã
- GitHubã®é å¿çµç¹-Centrifugeã®Pythonã¯ã©ã€ã¢ã³ãã«å ããŠãããžã§ã¯ãã«é¢é£ãããªããžããªã䜿çš-ãããžã§ã¯ããHerokuããã³é£æ¥ã©ã€ãã©ãªã®æåã®ããŒãžã§ã³ã«ãããã€ããæ¹æ³ã®äŸããããŸã-Djangoãšçµ±åããããã®å°ããªã©ãããŒïŒãã©ã¡ãŒã¿ãŒã®çæãç°¡çŽ åããŸãïŒæ¥ç¶ãé å¿åé¢æ©ã«ã¡ãã»ãŒãžã䟿å©ã«éä¿¡ããæ¹æ³ããããŸãïŒ;
- å€æŽ/è¿œå ã«å¿ããŠããã¥ã¡ã³ããä¿®æ£/æ¡åŒµã
- ä»ã®å€ãã®å€æŽãchangelogã«åæ ãããŸãã
Habréã®ããã°Mail.Ru Groupã§æ¢ã«è¿°ã¹ãããã«ãCentrifugeã¯äŒæ¥ã€ã³ãã©ãããã§äœ¿çšãããŠããŸãã å®éã®ã¡ãã»ãŒãžã¯ã瀟å ããŒã¿ã«ã«äœ¿ãããããè²ããã€ããã¯ã¹ãè¿œå ããŸããã ãŠãŒã¶ãŒã¯ãã³ã¡ã³ããæçš¿ããåã«ããŒãžãæŽæ°ããå¿ èŠã¯ãããŸããïŒæŽæ°ããå¿ èŠããæŽæ°ããå¿ èŠããããŸãã...ïŒ-ããã¯çŽ æŽãããããšã§ã¯ãããŸãããïŒ
ãããã«
ä»ã®ãœãªã¥ãŒã·ã§ã³ãšåæ§ã«ãé å¿åé¢æ©ãè³¢ã䜿çšããå¿ èŠããããŸãã ããã¯ç¹å¹è¬ã§ã¯ãããŸãããããã¯æŠããŠã¡ãã»ãŒãžãããŒã«ãŒã«ãããªãããšãç解ããå¿ èŠãããããã®å¯äžã®ã¿ã¹ã¯ã¯é¡§å®¢ãšã®æ¥ç¶ãç¶æããŠã¡ãã»ãŒãžãéä¿¡ããããšã§ããã¯ã©ã€ã¢ã³ããžã®ã¡ãã»ãŒãžã®é ä¿¡ä¿èšŒãåŸ ããªãã§ãã ããã ããšãã°ããŠãŒã¶ãŒãããŒãžãéããŠã©ããããããã¹ãªãŒãç¶æ ã«ããå Žåãã¿ã€ãã©ã€ã¿ãŒããèµ·åããããšãé å¿åé¢æ©ãžã®æ¥ç¶ãåã³ç¢ºç«ãããŸãã ãã ããã©ããããããã¹ãªãŒãã¢ãŒãã®ãšãã«çºçãããã¹ãŠã®ã€ãã³ãã¯å€±ãããŸãã ãŸãããŠãŒã¶ãŒã¯ããŒãžãæŽæ°ããããèªåã§ããã¯ãšã³ããã倱ãããã€ãã³ããããŒãããããã®ããžãã¯ãè¿œå ããå¿ èŠããããŸãã ãŸããã»ãŒãã¹ãŠã®ãªããžã§ã¯ãïŒæ¥ç¶ããã£ãã«ãã¡ãã»ãŒãžå±¥æŽïŒãRAMã«ä¿åãããããããã®æ¶è²»ãç£èŠããããšãéèŠã§ãã ãªãŒãã³ãã¡ã€ã«èšè¿°åã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®å¶éãå¿ããŠã¯ãªãããå¿ èŠã«å¿ããŠå¢ãããŠãã ããã ç¹å®ã®ç¶æ³ã§ã©ã®ãã£ã³ãã«ãäœæããããèããå¿ èŠããããŸã-ãã©ã€ããŒããŸãã¯ãããªãã¯ãå±¥æŽãããŸãã¯å±¥æŽãªãããã®ã¹ããŒãªãŒã®é·ããªã©ã
äžã§è¿°ã¹ãããã«ããµã€ãã«ãªã¢ã«ã¿ã€ã ãè¿œå ããæ¹æ³ã¯ãããããããŸããè³¢æã«éžæããå¿ èŠããããŸããå Žåã«ãã£ãŠã¯ãå¥ã®éåæãµãŒããŒã䜿çšãããªãã·ã§ã³ã¯ããŸãæå©ã§ã¯ãªãã§ãããã
PSæ¥ã®çµããã«ãç§ã¯ãµã³ã¯ãããã«ãã«ã¯ã§ã®ãã€ãœã³éçºè ã®äŒè°ã«åå ããŸããPiter Pyã ã¬ããŒãã®1ã€ã§ã¯ãCeleryã¯ãŒã«ãŒã§éåæã«å®è¡ãããã¿ã¹ã¯ã®æºåãã§ãããšããã€ã³ã¹ã¿ã³ããŠãŒã¶ãŒéç¥ã«ã€ããŠèª¬æããŸããã ã¹ããŒã«ãŒã¯ããããã®ç®çã®ããã«ãã«ããŒããšWebãœã±ããã®ã¿ã䜿çšãããšè¿°ã¹ãŸããã ããã«ç¶ããŠãDjangoãšã©ã®ããã«é£æºããããã©ã®ããã«éå§ããããã©ã®ãããªæ¿èªãè¡ããã«ã€ããŠããã€ãã®è³ªåãç¶ããŸãã...