Javascript: 소켓통신 서버에서 클라이언트로 데이터 전달할 때
조회수 1173회
안녕하세요.
아직도 크롤러를 만들고 있습니다. s3 업로드 부분은 난이도가 더 낮은 로컬 저장후 업로드 하는 방식으로 진행하게 되었습니다. 로컬에 작성된 파일을 읽어 업로드 하는 부분은 정상적으로 작동합니다. 하지만 그 뒤에 s3.upload()
의 콜백으로 나오는 data
를 소켓통신으로 client에 보내주고 싶은데 그 과정에서 해결이 되지 않아 질문드립니다.
아래는 코드입니다. 파일이 3개로 분리되어 있습니다.
// models/**.js
(...)
await uploadFile(filename)
여기는 크롤후 스트림으로 파일을 저장한 후 s3.js
를 부르는 부분입니다.
// s3.js
(...)
const uploadFile = async filename => {
await fs.readFile(join(__dirname, output, filename), (err, data) => {
s3Upload(filename, data)
})
}
const s3Upload = async (filename, data) => {
await s3.upload({
Bucket: 'work543-express-crawler',
Key: filename,
Body: data,
ContentEncoding: 'utf-8',
ACL: 'public-read-write'
}, (err, data) => data ) // <-- 이 부분
}
s3.upload()
의 콜백에서 데이터를 socket.emit()
으로 보내야하는데 어떻게 해야할지 갈피를 못잡고 있습니다.
// socketIo.js
(...)
const socketServer = app => {
const socketio = require('socket.io')(app)
socketio.on('connection', socket => {
socket.on('append', async data => {
queue(data)
})
socket.emit(someEventName, theData) // <-- 이 부분은 수도코드입니다.
})
}
socket.emit()
에 data
가 들어가려면 어떻게 해야할지 아래와 같이 생각하고 있습니다.
s3.upload()
의 콜백인자인data
를 export를 해야할 것 같다.- 혹은
socket.emit()
과s3.upload()
를 연결시켜주는 어떤 이벤트를 발생시켜야 할 것 같다.
혹시 이 방향으로 하는 생각이 맞는지, 맞다면 어떻게 문제를 해결해야할지 가이드를 주시면 감사하겠습니다.
감사합니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력