이 저장소를 복제하십시오
리포지토리를 장착 하고이 명령을 실행하여 종속성을 설치하십시오.
make setup
make run
localhost:8080 에서 실행됩니다 서버를 실행 한 후 WebSocket 클라이언트를 엽니 다. 아무것도 없다면 Chrome의 Websocket King Extension을 사용해보십시오.
ws://localhost:8080/socket 에 연결하면 서버가 인사합니다.
Server: Welcome! Your ID is f0ab664a-5af3-4f8d-8afe-eb93085267e4
{
"action": "subscribe",
"topic": "world"
}
{
"action": "publish",
"topic": "world",
"message": "Hello world!"
}
{
"action": "unsubscribe",
"topic": "world"
}
"REST API 대신 WebSocket을 사용해야하는 이유"라고 물을 수도 있습니다.
REST API는 요청 당 한 번만 응답 만 보낼 수있는 http를 사용합니다.
한편, WebSocket은 매번 연결을 재건 할 필요없이 지속적인 양방향 통신에 사용할 수 있습니다.
이것은 채팅이나 펍 서브와 같은 일부 시나리오에서 유용 할 수 있습니다.
다음은 HTTP와 WebSocket의 차이를 시각화하는 다이어그램입니다.

이 흐름도는이 서버의 작동 방식을 설명합니다. 
cmd
└── main
└── main.go
internal
└── websocket
└── handler.go
└── model.go
└── server.go
main.go : 실행될 기본 파일입니다.
handler.go : 연결 열기/닫기를 처리하고 메시지를 서버로 전달합니다.
Model.go : 서버에서 사용하는 모델을 저장합니다.
Server.go : 클라이언트 메시지에 따라 특정 작업을 실행하며 서버가 WebSocket 서버로 제대로 작동하는 데 필요한 기능도 포함합니다.
이 저장소는 이상적이지 않습니다. 그것은 단지 개념 증명 일뿐입니다.
이 저장소는 펍 서브에 가깝지만 여전히 채팅 서버에 사용할 수 있습니다.
예를 들어, 연결된 소켓에 함수를 추가하여 클라이언트가 자신의 ID를 주제로 자동 구독하도록합니다. 그런 다음 다른 클라이언트는 해당 사용자의 ID를 주제로 사용하여 메시지를 게시합니다.
다른 사용자가 다른 사람의 ID에 가입하는 것을 방지하기 위해 그러한 솔루션을 승인과 결합하여 그러한 솔루션을 구축하려고 시도했지만 작동합니다.
이 저장소는 @tabvn의 Golang-Pubsub에서 영감을 받았습니다