이 시간 동안 저는 socket.io를 사용하여 nestjs가 서버로 작동하여 클라이언트 측에 대한 응답을 수신하고 다시 보낼 수 있도록 했습니다.
이를 달성하기 위해 동일한 루트 디렉토리에 nestjs와 반응 앱을 설치했습니다.
테스트 목적의 일환으로 아래와 같이 간단한 실시간 채팅 앱을 만들었습니다.
1. reactjs, nestjs에 대해 .on 및 .off(연결, 연결 해제)를 설정합니다.
2. cors: true가 설정되어 있는지 확인하십시오. 그렇지 않으면 실시간으로 많은 오류가 표시됩니다.
3. 포트 번호는 동일해야 합니다. 또는 서버 측이 클라이언트 측의 말을 듣지 않습니다.
// Nest.js
import { WebSocketGateway, WebSocketServer, SubscribeMessage, OnGatewayConnection, OnGatewayDisconnect } from '@nestjs/websockets';
import { Server, Socket } from 'socket.io';
@WebSocketGateway({cors: true})
export class ChatGateway implements OnGatewayConnection, OnGatewayDisconnect {
@WebSocketServer() server: Server;
handleConnection(socket: Socket) {
console.log('Client connected:', socket.id);
}
handleDisconnect(socket: Socket) {
console.log('Client disconnected:', socket.id);
}
@SubscribeMessage('message')
handleMessage(socket: Socket, message: string) {
console.log('Received message:', message);
this.server.emit('message', message);
}
}
// React.js
import React, { useState, useEffect } from 'react';
import io from 'socket.io-client';
import styled from 'styled-components';
import Skeleton from './Skeleton';
// import { useRef } from 'react';
// import SidebarWhole from './Sidebar';
const Chat = () => {
const (messages, setMessages) = useState(());
const (input, setInput) = useState('');
const socket = io('http://localhost:3001', {
pingTimeout: 60000,
});
// Skeleton
// https://stackoverflow.com/questions/69008820/websocket-connection-error-insufficient-resources
// const chatBodyRef = useRef(null);
useEffect(() => {
// Subscribe to "message" event
socket.on('message', handleMessage);
// Unsubscribe from "message" event when component unmounts
return () => {
socket.off('message', handleMessage);
// socket.disconnect('message', handleMessage);
};
}, ());
const handleMessage = (message) => {
setMessages((messages) => (...messages, message));
};
const sendMessage = (event) => {
event.preventDefault();
socket.emit('message', input);
setInput('');
};
return (
// <SidebarWhole>
<ChatWrapper>
<Sidebar>
<SidebarHeader>Telegram</SidebarHeader>
<SidebarItem active>Chats</SidebarItem>
<SidebarItem>Contacts</SidebarItem>
<SidebarItem>Settings</SidebarItem>
</Sidebar>
<ChatContainer>
<ChatHeader>
<div>Telegram Chat</div>
<div>Online</div>
</ChatHeader>
<ChatBody>
{messages.map((message, index) => (
<ChatMessage key={index}>
{message}
</ChatMessage>
))}
</ChatBody>
<ChatInputArea onSubmit={sendMessage}>
<ChatInput
value={input}
onChange={(e) => setInput(e.target.value)}
placeholder="Type a message..."
/>
<ChatButton>Send</ChatButton>
</ChatInputArea>
</ChatContainer>
</ChatWrapper>
// </SidebarWhole>
);
};
export default Chat;
GitHub – mireu-san/nest-react-socketio: 테스트 기능을 위한 저장소.
기능 테스트를 위한 저장소입니다. GitHub에서 계정을 생성하여 mireu-san/nest-react-socketio 개발에 기여하십시오.
github.com

