typescript+vue+websocket 기반의 실시간 채팅 응용 프로그램
코드 여기 있어요.
해설의 분할선 --------
모델 정의
실시간 채팅 앱에서 앞뒤가 가장 관심 있는 모델은 메시지와user이다.여기에 typescript로 다음과 같이 정의합니다
실시간 채팅 앱에서 앞뒤가 가장 관심 있는 모델은 메시지와user이다.여기에 typescript로 다음과 같이 정의합니다
class User {
private name: string
private id: string
private avatar: string
}
import User from './user'
class Message {
private from: User;
private content: string
private type: string
}
이 모델의 앞뒤 부분은 다시 사용할 수 있습니다.
앞부분
채팅 응용 프로그램에서 메시지와user 데이터에 대한 조작이 빈번하기 때문에 이 부분과 관련된 코드를 vuex에 쓰고 mapstate
와mapmutation
를 통해 vue 실례에 주입합니다@Component({
computed: {
...mapState(['ws', 'msgList', 'user']),
},
methods: {
...mapMutations(['toggleLogin', 'initWS', 'addMsg', 'sendMsg']),
},
})
socket 통신에 게으름을 피웠습니다. 새로운 소식이 있으면 채널로 직접 밀어넣고 채널의 변화를 감청하여 로컬로 렌더링합니다.// websocket
this.sendMsg({
type: 'addMsg',
from: user,
content,
});
/
this.ws.onopen = (e: any) => {
console.log('connection established');
this.sendJoin();
};
this.ws.onmessage = (e: any) => {
const msg = JSON.parse(e.data);
this.$store.commit('addMsg', msg);
};
실제 채팅 앱에서는 로컬과 웹소켓 채널을 동시에 전송하는데 로컬에서 전송된 메시지에 로딩을 추가하고 메시지가 실제로 로딩으로 전송되면 로딩을 제거한다(추측...)
백엔드 섹션
백엔드 코드는 설명하기 어려울 정도로 간단합니다.핵심 코드는 두 가지입니다.// Broadcast to all.
const broadcast = (data: message) => {
wss.clients.forEach((client) => {
if (client.readyState === WebSocket.OPEN) {
client.send(data);
}
});
};
wss.on('connection', (ws) => {
console.log('connection established');
// ,
ws.on('message', (data: message) => {
broadcast(data);
});
});
부팅
@Component({
computed: {
...mapState(['ws', 'msgList', 'user']),
},
methods: {
...mapMutations(['toggleLogin', 'initWS', 'addMsg', 'sendMsg']),
},
})
// websocket
this.sendMsg({
type: 'addMsg',
from: user,
content,
});
/
this.ws.onopen = (e: any) => {
console.log('connection established');
this.sendJoin();
};
this.ws.onmessage = (e: any) => {
const msg = JSON.parse(e.data);
this.$store.commit('addMsg', msg);
};
백엔드 코드는 설명하기 어려울 정도로 간단합니다.핵심 코드는 두 가지입니다.
// Broadcast to all.
const broadcast = (data: message) => {
wss.clients.forEach((client) => {
if (client.readyState === WebSocket.OPEN) {
client.send(data);
}
});
};
wss.on('connection', (ws) => {
console.log('connection established');
// ,
ws.on('message', (data: message) => {
broadcast(data);
});
});
부팅
cd client && npm run serve
cd server && npm run watch
이렇게 간단한 실시간 채팅 앱 하나로 완성~~~
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.