�@���āAWebSocket���g���āA�������T���v��������Ă����̂ł����A��͂���ۂɎg����A�v��������Ă݂����Ȃ���̂ł��B�������node.js�Ȃǂ��g���āA�������烊�A���^�C���ȃA�v�������̂��ǂ��̂ł����A�u�����̃A�v���Ƀ��A���^�C���ȋ@�\���ȒP�ɒlj��ł���Ηǂ���ˁv�ƁA�Г��ł悭�b���Ă��܂����B�܂��AGoogle App Engine��Heroku�Ƃ�����PaaS�iPlatform as a Service�j��ł��g������ǂ���ˁA�Ƃ����ӌ�������܂����B
�@���̂Ƃ��A���Ђ̃f�B���N�^�[�ł���@maxthelion���u�N���C�A���g���T�[�o�Ԃ�HTTP Post�iAjax�j�ŁA�T�[�o���N���C�A���g�Ԃ�WebSocket�Łv�Ƃ����A�[�L�e�N�`������A@mlaughran����C�Ƀv���g�^�C�v�����グ�܂����B���ꂪWebSocket���N���E�h�ŗ��p���₷�����鎄�����̃T�[�r�X�uPusher�v�a���̔w�i�ł��B
�@�����܂œǂ܂ꂽ�ǎ҂̊F����́u���悢��node.js�̎��H�������v�Ǝv��ꂽ��������܂��APusher�́uem-websocket�v�Ƃ���Ruby��EventMachine�𗘗p�������C�u�������g�p���Ă��܂��B��������Ruby���̗p�������R�ł����ANew Bamboo���̂�Ruby�ɓ��������V�X�e���J����ЂȂ̂ŁARuby�̂ق����J���X�s�[�h�������Ƃ����̂��������܂��B�܂��Anode.js�͓����͂܂��Ⴂ�t���[�����[�N�������̂Ńf�[�^�x�[�X��b�Z�[�W���O�V�X�e���Ȃǂ́A�ق��̃R���|�[�l���g�𗘗p���郉�C�u�������o������Ă��Ȃ�������A�܂����W�r�ゾ�����肵���Ƃ����̂����R�ł��B
�@���Ȃ݂�Pusher�Ƃ������t�́u����̔��l�v�̃X�����O�ł�����܂��B�u�T�[�o���N���C�A���g�Ԃ�Push����v�Ƃ����Ӗ��ƂƂ��ɁA�u����̂悤�ɒ��Ő��̂���قǖ��͓I�ȃA�v������鋴�n���l�v�ƌ����Ӗ����|�����킹�܂����B
�@�A�[�L�e�N�`����}�ɂ���ƈȉ��̂悤�ɂȂ�܂��B
�@�u�N���C�A���g��Web�T�[�o��Pusher WebSocket�T�[�o�v�̏��́AAjax��REST�Ƃ������]����HTTP���N�G�X�g��p���čs���܂��B�����āuPusher WebSocket�T�[�o���N���C�A���g�v�̉��葤�̂�WebSocket�̃R�l�N�V�����𗘗p���ăf�[�^���v�b�V�����郂�f���ł��B
�@�������邱�Ƃ�Web�T�[�o���͋����̃X�e�[�g���X�Șg�g�݂̒��ŊȒP�Ɂu�v�b�V���@�\�v�����t���邱�Ƃ��ł���悤�ɂȂ�܂��B
�@�g�����Ɋւ��Ă�Pusher�z�[���y�[�W�́u�N�C�b�N�X�^�[�g�v�̃y�[�W�ɂ���̂ł����A���ꂾ�Ɩʔ����Ȃ��̂ŁA�����ł͎��ۂ̃I�[�v���\�[�X�A�v�������ɉ�����Ă����܂��傤�B�T���v���͎��̉�Ђ̌������ł���Paul Jensen��������uRetrospectiveapp�v�ł��B�S�R�[�h��Github�ɂ���܂��B
�@�u���g���X�y�N�e�B�u�v�Ƃ����̂̓A�W���C���\�t�g�J���ɗǂ��g�����@��1�Ȃ̂ł����A�e�C�e���[�V�����i�������ԁj���ƂɊJ����锽�ȉ�̂��Ƃł��B�e�����o�[�́u�ǂ��������Ɓv�u�����������Ɓv�Ȃǂ��|�X�g�C�b�g�ɏ����o���A�O���[�v���Ƃɕ������肵�Ȃ���c�_���邱�ƂŁA����̃C�e���[�V�����Ɍ��������P�_��T���o���Ƃ�����@�ł��B
�@�ł͎��ۂɃR�[�h�̈ꕔ�����Ă݂܂��傤�B
�܂����N���C�A���g�T�C�h�̃R�[�h�ł��B
pusher = new Pusher(Pusher.key); pusher.subscribe(Pusher.channel); pusher.bind('note-create', function(note) { generateNote(note); }); pusher.bind('note-destroy', function(data) { $("#note_"+data.id).remove(); }); pusher.bind('note-update', function(note) { updateNote(note); }); pusher.bind('note-softupdate', function(note) { updateNote(note); });
�@1�s�ڂ́upusher = new Pusher(Pusher.key);�v��WebSocket����Pusher�I�u�W�F�N�g���쐬���܂��B1�Ԗڂ̈����́gPusher.key�h�Ƃ����Ƃ���ɂ�Pusher�ɃT�C���A�b�v�������ɗ^������L�[������U��܂��B
�@������2�s�ڂ́upusher.subscribe(Pusher.channel)�v�Ƃ����Ƃ���Ƀ`���l����������U��܂��B�u�`���l�����v�Ƃ�����������Ȃ����t���o�܂������A�����Pusher�ɂ�����PubSub���f�����������邽�߂̎d�g�݂ł��B�u�u���[�h�L���X�g�v�Ƃ����̂̓T�[�o�ɐڑ����Ă���u���E�U�̂��ׂĂɃ��b�Z�[�W�𑗂邱�Ƃł����A���ۂɂ͓���̃��[�U�[�ɂ̂݁A����̏��𑗂�̂����ʂł��B�����ł܂����[�U�[���`���l��A�Ɏ��g��o�^�i���̂��Ƃ�Subscribe�ƌĂт܂��j���A�f�[�^�̑����́i���̏ꍇWeb�T�[�o�j�̓`���l��A�ɂ̂݃f�[�^���������܂��i���̂��Ƃ�Publish�ƌĂт܂��j�B�`���l�����ɉ��Ă邩�͐l���ꂼ��ł��B�e�u���O�G���g���[���ƂɁublog_posts_1_comments�v�̂悤�ȃR�����g�`���l�������Ă��ǂ��ł����A���[�U�[���ƂɃ`���l���������蓖�ĂĂ݂Ă��ʔ�����������܂���B
�@3�s�ڈȍ~�upushere.bind('�C�x���g��', function(note) {});�v�̂悤�ȃR�[�h�������Ă��܂��BWebSocket�ɂ͂��Ƃ��Ɓuonmessage�v�Ƃ����C�x���g�n���h��������̂ł����A����ɂ�WebSocket���瑗���Ă���f�[�^���ׂĂɔ������܂��B��������ƃf�[�^�̎�ނɂ���ă��W�b�N���邽�߂�if���������R�[�h�ɂȂ��Ă��܂������ł��B
�@������Pusher�ł̓C�x���g���ƂɃo�C���h���郂�f�����̗p���邱�ƂŃR�[�h���ׂ����܂Ƃ߂₷���Ȃ��Ă��܂��B��̗�ł͊e���[�U�[�������ŃR�[�h���`���Ă��܂����APusher���g���ŋ߂̃o�[�W�����i1.6�j�́u�v���[���X�@�\�v�ŃC�x���g�𑽗p���Ă��܂��B�ǂ��������Ƃ��Ƃ����ƁA������Subscribe���Ă���`�����l���ɁA�ق��̃����o�[���ڑ�����Ɓupusher:member_added�v�A�ؒf���ꂽ���ɂ� �upusher:member_removed�v�Ƃ������𑗂�悤�ɂ��Ă��܂��B
�@�����T�[�o�T�C�h�̃R�[�h�̔����ł��B�T�[�o�T�C�h�̗�ɂ�Sinatra�Ƃ���Ruby���̌y��Web�t���[�����[�N���g���Ă��܂��B
PUSHER_CHANNEL = 'retrospectiveapp-' + Sinatra::Application.environment.to_s put '/notes/:id/softupdate.json' do content_type 'text/json', :charset => 'utf-8' Pusher[PUSHER_CHANNEL].trigger_async('note-softupdate', params[:note].to_json, params[:socket_id]) params[:note].to_json end
�@�����ł��`���l���ƃC�x���g���ƂɃf�[�^��Push���Ă���̂�������ł��傤���H ���̗�ł�Pusher�Ƃ���Ruby�p�̃��C�u�������g���Ă��܂����A���̂ق�������̃��C�u������������Ă��܂��B�܂��A����̌���̃��C�u���������݂��Ȃ��ꍇ�ł��A���ʂ�HTTP�N���C�A���g���g����Push�\�ł��B
�@���ہAPusher�ɃA�J�E���g���쐬����ƁA�ȉ��̂悤�ȃR�}���h���\������A������R�}���h�v�����v�g��ŃR�s�[���y�[�X�g���邱�Ƃ�Push���邱�Ƃ��\�ł��B
curl -d "hello world" \ "http://api.pusherapp.com/apps/app_id/channels/test_channel/events?"\ "auth_version=1.0&"\ "auth_key=94132f5d219216&"\ "body_md5=01eeed093cb22bb8f5acdc3&"\ "auth_timestamp=1287600207&"\ "name=my_event&"\ "auth_signature=4205808619016f070384ef5"
�@Pusher�ł͂��̂ق��ɂ��A�݂Ȃ���̊J���ɖ𗧂f�o�b�M���O�p�R���\�[����A�ǂꂮ�炢�̃��b�Z�[�W����ڑ����������������O���t�Ō��邱�Ȃǂ��ł��܂��B���Ј�x�o�^���Ă������ŐF�X�����Ă݂Ă��������B
�@�uPubSub�v�Ƃ��u�v���[���X�v�ȂǂƂ��������t���o�Ă������_�ŁA�u������Ă܂���XMPP(Extensible Messaging and Presence Protocol)����Ȃ��H�v�Ǝv��ꂽ�ǎ҂������̂ł͂Ȃ����Ǝv���܂��B
�@XMPP��10�N�ȏ�̗��j�����v���g�R���ł����ɁAExtensible�Ƃ��镪�A�@�\���L�x�ł��B
�@XMPP���u���E�U����g�����߂�JavaScript���C�u�����Ƃ��ẮABOSH(Bidirectional-streams Over Synchronous HTTP)�Ƃ���Comet�Ɣ��Ɏ����v���g�R�����g�p����Strophe�Ƃ����̂��L���Ȃ̂ł����A���N�̎n�߂ɊJ���Ҍ������[�����O���X�g��WebSocket�T�|�[�g�\������Ƃ���A�u�����ƃh���t�g���ł܂��Ă���v�Ƃ̂��Ƃł����B
�@����XMPP���u���E�U�ォ��g�����Ƃɋ�����������́AStrophe���A�G���^�[�v���C�Y�Ȋ��ł����Kaazing���g�����Ƃ������߂��܂��BKazzing�Ђ́AChromium��WebSocket����������O����AFlashSocket��Long Polling���g�p�����G�~�����[�V����������Ă����ɁAXMPP�ASTOMP�AAMQP�p��JavaScript���C�u���������Ă���͂��ł��B���Ȃ݂�Kaazing�Ђ�WebSocket�̕��y�ɂ��M�S�Ȃ悤�ŁA����������N��12����Kaazing�Ђ̎�Â���g���[�j���O�ɎQ�����AWebSocket�Ɋւ���m���������ł������܂����B
�@STOMP(Streaming Text Oriented Message Protocol)�ɂ��Ă̓T�[�o�T�C�h��ActiveMQ���A�N���C�A���g�T�C�hJavaScript���C�u�����Ƃ��Ă�stomp-websocket�Ƃ����̂�WebSocket���T�|�[�g���Ă��܂��B
�@AMQP(Advanced Message Queuing Protocol)�Ɋւ��Ăł����APusher�̓�����WebSocket�T�[�o���X�P�[���A�E�g�����邽�߂̎�i��1�Ƃ���RabbitMQ���g�p���Ă��܂��B
�@�����X�^���_�[�h���b�Z�[�W���O�v���g�R����WebSocket�̈Ⴂ�ł����A��������Pusher�́A������Web�T�[�o�Ƃ̃C���e�O���[�V�����̂��₷������Ԃ̏d�_�ɒu���Ă��邱�Ƃł��B�܂�Pusher�̓N���E�h�T�[�r�X�Ƃ��Ē��Ă��邽�߁A�e�������O�Ń��b�Z�[�W���O�T�[�o�𗧂��グ�Ȃ��Ă��ǂ��Ƃ����̂�������1�ł��B
�@���āA����͂����܂łł��BWebSocket�̕ς�葱����d�l�̖��A�u���E�U�����̏ɉ����āA�������������グ���uPusher�v�ɂ��Ă��Љ�܂����B�����WebSocket�̎���𑽂߂Ɏ��グ�AWebSocket�̍���̉\���ɂ��Ă̎��̗\�z�������Ă݂����Ǝv���܂��B
Copyright © ITmedia, Inc. All Rights Reserved.