ActionCable 및 Vue.js로 채팅을 폭속 구현
9533 단어 websocketActionCableVue.jsRails5
이번에는 Vue.js를 사용하는 웹 응용 프로그램에 채팅 기능을 통합하고 싶었으므로 Rails의 ActionCable을 사용하여 폭속을 구현하려고했습니다.
ActionCable이란?
WebSocket을 다루는 Rails5의 새로운 기능
채팅과 같은 실시간으로 데이터 업데이트하는 앱을 만들 수 있습니다.
이런 녀석
운영 환경
클라이언트측
클라이언트측
서버측
서버 측 구현 절차
Rails 애플리케이션을 작성했다고 가정합니다.
채널 만들기
콘솔rails g channel message
채널 설정
app/channels/message_channel.rbclass MessageChannel < ApplicationCable::Channel
# チャンネル接続時に呼ばれる
def subscribed
stream_from "message_channel"
end
# メッセージをブロードキャストするためのアクション
def speak(data)
ActionCable.server.broadcast 'message_channel', message: data['message']
end
end
라우팅 추가
config/route.rbRails.application.routes.draw do
# 以下を追記
mount ActionCable.server => '/cable'
end
클라이언트 측 구현 절차
Vue.js에서 구현합니다. Rails의 WebPacker는 작동하지 않았으므로 로컬에서 WebPack을 사용하여 개발하고 있습니다.
먼저 필요한 패키지를 설치합니다.
콘솔npm install actioncable
main.js를 진입 점으로 진행합니다.
main.jsimport Vue from 'vue';
import ActionCable from 'actioncable';
import Chat from './chat.vue';
const cable = ActionCable.createConsumer('ws:hoge.com:3000/cable');
Vue.prototype.$cable = cable;
new Vue({
components: {
Chat,
template: '<Chat/>',
},
}).$mount('#app');
통신 부분 구현
chat.vue<template>
<div>
<input v-model="msgBox" placeholder="message here"></input>
<button v-if="messageChannel" @click="speak">送信</button>
</div>
</template>
<script>
export default {
data() {
return {
msgBox: "",
messages: [],
messageChannel: null,
};
},
created() {
this.messageChannel = this.$cable.subscriptions.create( "MessageChannel",{
received: (data) => {
this.messages.push(data)
},
})
},
methods: {
speak() {
this.messageChannel.perform('speak', {
message: msgBox,
});
},
},
}
</script>
빠는거리
rails g channel message
class MessageChannel < ApplicationCable::Channel
# チャンネル接続時に呼ばれる
def subscribed
stream_from "message_channel"
end
# メッセージをブロードキャストするためのアクション
def speak(data)
ActionCable.server.broadcast 'message_channel', message: data['message']
end
end
Rails.application.routes.draw do
# 以下を追記
mount ActionCable.server => '/cable'
end
Vue.js에서 구현합니다. Rails의 WebPacker는 작동하지 않았으므로 로컬에서 WebPack을 사용하여 개발하고 있습니다.
먼저 필요한 패키지를 설치합니다.
콘솔
npm install actioncable
main.js를 진입 점으로 진행합니다.
main.js
import Vue from 'vue';
import ActionCable from 'actioncable';
import Chat from './chat.vue';
const cable = ActionCable.createConsumer('ws:hoge.com:3000/cable');
Vue.prototype.$cable = cable;
new Vue({
components: {
Chat,
template: '<Chat/>',
},
}).$mount('#app');
통신 부분 구현
chat.vue
<template>
<div>
<input v-model="msgBox" placeholder="message here"></input>
<button v-if="messageChannel" @click="speak">送信</button>
</div>
</template>
<script>
export default {
data() {
return {
msgBox: "",
messages: [],
messageChannel: null,
};
},
created() {
this.messageChannel = this.$cable.subscriptions.create( "MessageChannel",{
received: (data) => {
this.messages.push(data)
},
})
},
methods: {
speak() {
this.messageChannel.perform('speak', {
message: msgBox,
});
},
},
}
</script>
빠는거리
config/application.rb
ActionCable.server.config.disable_request_forgery_protection = true
config.action_cable.url = 'wss://hogehoge.com/cable'
참고
Rails 5 + ActionCable로 만들기! 간단한 채팅 앱
rails와 vue로 실시간 주문 시스템을 만들어 보았습니다.
ActionCable의 README를 읽고 채팅 앱을 만들어 보았습니다.
프런트 엔드에서 ActionCable을 npm을 통해 사용
Action Cable에서 진행률 표시줄 업데이트
Reference
이 문제에 관하여(ActionCable 및 Vue.js로 채팅을 폭속 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/gacktomo/items/a6926b3391b5fc6d59a1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(ActionCable 및 Vue.js로 채팅을 폭속 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/gacktomo/items/a6926b3391b5fc6d59a1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)