소개
서버 전송 이벤트(SSE)는 서버가 HTTP를 통해 클라이언트에 실시간 업데이트를 푸시할 수 있게 해주는 웹 기술입니다. WebSocket과 달리 SSE는 서버에서 브라우저로의 단방향 통신 채널을 사용하고 일반 HTTP 연결을 통해 작동하므로 구현이 더 간단합니다. 실시간 점수, 알림, 실시간 모니터링 대시보드 등 주기적인 업데이트가 필요한 애플리케이션에 특히 유용합니다.
저는 현재 AI가 다양한 주제에 대해 토론하는 애플리케이션을 개발하고 있기 때문에 이 데모를 만들었습니다. 스트림과 같은 기능을 구현하고 싶었는데 "SSE"라는 기술을 발견했습니다.
데모 개요
이 데모에서는 SSE(서버 전송 이벤트)를 사용하여 API에서 브라우저로 실시간 업데이트를 보내는 방법을 보여줍니다. 이 예에서 브라우저는 서버에서 보낸 일련의 샘플 메시지를 표시합니다. 이 데모는 단순하기 때문에 SSE의 작동 방식을 이해하고 이를 프로젝트에 통합하기 위한 훌륭한 출발점이 됩니다.
데모 비디오
아래는 SSE(Server-Sent Events) 데모가 실시간으로 작동하는 방식을 보여주는 동영상입니다. 이 비디오를 시청하면 클라이언트와 서버가 상호 작용하여 실시간 업데이트를 제공하는 방법을 더 잘 이해할 수 있습니다.
구현
서버 전송 이벤트(SSE) 데모의 핵심 구현은 프런트엔드와 백엔드의 두 부분으로 나뉩니다. 전체 소스 코드는 GitHub: sse-demo 저장소에서 확인할 수 있습니다.
프런트엔드(ui/src/app/page.tsx)
프런트엔드는 React로 구축되었으며 SSE 연결을 시작 및 중지하는 버튼을 제공하여 서버의 실시간 메시지를 표시합니다. 주요 내용은 다음과 같습니다.
-
SSE에 연결: handlerStartConnection 함수는 /events 엔드포인트에 연결된 EventSource 개체를 생성합니다. 메시지, 열린 이벤트 및 오류 이벤트를 수신합니다.
- onmessage: 수신 메시지를 처리하고 메시지 상태를 업데이트합니다.
- onopen: 연결이 설정되면 기록합니다.
- onerror: 오류를 처리하고, 세부 정보를 기록하고, 필요한 경우 연결을 종료합니다.
연결 중지: handlerStopConnection 함수는 SSE 연결을 닫고 정리합니다.
UI: 이 페이지에는 시작/중지 버튼과 메시지 표시 목록이 있는 간단한 인터페이스가 포함되어 있습니다.
"use client"; import type React from "react"; import { useState } from "react"; const App: React.FC = () => { const [messages, setMessages] = useState<string>([]); const [eventSource, setEventSource] = useState<eventsource null>(null); const handleStartConnection = () => { const newEventSource = new EventSource("http://localhost:8080/events"); const handleOnMessage = (event: MessageEvent) => { console.log("onmessage", event.data); setMessages((prev) => [...prev, event.data]); }; const handleOnOpen = () => { console.log("Connection established"); }; const handleOnError = (error: Event) => { console.error("onerror", error); console.log("readyState:", newEventSource.readyState); console.log("Connection error occurred."); newEventSource.close(); setEventSource(null); }; const handleOnClose = () => { console.log("Connection is being closed by the server."); newEventSource.close(); setEventSource(null); }; newEventSource.onmessage = handleOnMessage; newEventSource.onopen = handleOnOpen; newEventSource.onerror = handleOnError; newEventSource.addEventListener("close", handleOnClose); setEventSource(newEventSource); }; const handleStopConnection = () => { if (eventSource) { eventSource.close(); setEventSource(null); console.log("Connection closed"); } }; return ( <div> <h1 id="Server-Sent-Events-Demo">Server-Sent Events Demo</h1> <button type="button" onclick="{handleStartConnection}" disabled classname="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded disabled:opacity-50"> Start Connection </button> <button type="button" onclick="{handleStopConnection}" disabled classname="bg-red-500 hover:bg-red-700 text-white font-bold py-2 px-4 rounded disabled:opacity-50 ml-2"> Stop Connection </button> <ul> {messages.map((message, index) => ( <li key="{`${index}-${message}`}">{message}</li> ))} </ul> </div> ); }; export default App; </eventsource></string>
백엔드(api/main.go)
백엔드는 Go용 Gin 프레임워크를 사용하여 구축되었으며 다음과 같은 주요 기능을 포함합니다.
CORS 구성: 백엔드는 Gin CORS 미들웨어를 사용하여 디버깅 중에 연결을 허용합니다.
-
SSE 엔드포인트: /events 엔드포인트는 각 메시지 사이에 지연을 두고 미리 정의된 일련의 메시지를 클라이언트에 스트리밍합니다. 주요 구성 요소:
- 헤더는 텍스트/이벤트 스트림 콘텐츠 유형을 지정하도록 설정됩니다.
- 메시지는 각 메시지 사이에 2초의 지연을 두고 반복적으로 전송됩니다.
- 마지막 닫기 이벤트는 연결 종료를 알립니다.
"use client"; import type React from "react"; import { useState } from "react"; const App: React.FC = () => { const [messages, setMessages] = useState<string>([]); const [eventSource, setEventSource] = useState<eventsource null>(null); const handleStartConnection = () => { const newEventSource = new EventSource("http://localhost:8080/events"); const handleOnMessage = (event: MessageEvent) => { console.log("onmessage", event.data); setMessages((prev) => [...prev, event.data]); }; const handleOnOpen = () => { console.log("Connection established"); }; const handleOnError = (error: Event) => { console.error("onerror", error); console.log("readyState:", newEventSource.readyState); console.log("Connection error occurred."); newEventSource.close(); setEventSource(null); }; const handleOnClose = () => { console.log("Connection is being closed by the server."); newEventSource.close(); setEventSource(null); }; newEventSource.onmessage = handleOnMessage; newEventSource.onopen = handleOnOpen; newEventSource.onerror = handleOnError; newEventSource.addEventListener("close", handleOnClose); setEventSource(newEventSource); }; const handleStopConnection = () => { if (eventSource) { eventSource.close(); setEventSource(null); console.log("Connection closed"); } }; return ( <div> <h1 id="Server-Sent-Events-Demo">Server-Sent Events Demo</h1> <button type="button" onclick="{handleStartConnection}" disabled classname="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded disabled:opacity-50"> Start Connection </button> <button type="button" onclick="{handleStopConnection}" disabled classname="bg-red-500 hover:bg-red-700 text-white font-bold py-2 px-4 rounded disabled:opacity-50 ml-2"> Stop Connection </button> <ul> {messages.map((message, index) => ( <li key="{`${index}-${message}`}">{message}</li> ))} </ul> </div> ); }; export default App; </eventsource></string>
실행 방법
이 데모를 실행하려면 GitHub 저장소의 README.md 파일을 참조하세요. 여기에는 프로젝트의 프런트엔드와 백엔드를 모두 설정하고 실행하기 위한 단계별 지침이 포함되어 있습니다.
결론
이 데모는 서버에서 보낸 이벤트(SSE)에 대해 간단하면서도 효과적인 소개를 제공하며 서버에서 브라우저로 실시간 메시지를 스트리밍하는 방법을 보여줍니다. 기본에 중점을 두어 핵심 개념을 빠르게 이해하고 자신의 프로젝트에서 SSE를 실험해 볼 수 있도록 설계되었습니다.
이 예제를 시험해 보거나 이를 기반으로 구축하는 데 관심이 있다면 GitHub: sse-demo 저장소에서 전체 소스 코드를 확인하세요.
위 내용은 SSE(Server-Send Events)에 대한 가장 간단한 데모의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

GO에서 Mutxes 및 Locks를 사용하는 것이 스레드 안전을 보장하는 열쇠입니다. 1) 상호 배타적 액세스를 위해 Sync.Mutex를 사용하십시오. 2) 읽기 및 쓰기 작업에는 Sync.rwMutex 사용 3) 성능 최적화를 위해 원자 작업을 사용하십시오. 이러한 도구와 사용 기술을 마스터하는 것은 효율적이고 신뢰할 수있는 동시 프로그램을 작성하는 데 필수적입니다.

동시 GO 코드의 성능을 최적화하는 방법은 무엇입니까? 벤치마킹 및 성능 분석을 위해 Getest, Gobench 및 PPROF와 같은 GO의 내장 도구를 사용하십시오. 1) 테스트 패키지를 사용하여 동시 기능의 실행 속도를 평가하기 위해 벤치 마크를 작성하십시오. 2) PPROF 도구를 사용하여 성능 분석을 수행하고 프로그램에서 병목 현상을 식별하십시오. 3) 쓰레기 수집 설정을 조정하여 성능에 미치는 영향을 줄입니다. 4) 채널 작동 최적화를 최적화하고 효로 선수 수를 제한하여 효율성을 향상시킵니다. 지속적인 벤치마킹 및 성능 분석을 통해 동시 GO 코드의 성능을 효과적으로 개선 할 수 있습니다.

동시 GO 프로그램에서 오류 처리의 일반적인 함정을 피하는 방법 : 1. 오류 전파 보장, 2. 처리 시간 초과, 3. 집계 오류, 4. 컨텍스트 관리, 5. 오류 래핑, 6. 로깅, 7. 테스트를 사용하십시오. 이러한 전략은 동시 환경에서 오류를 효과적으로 처리하는 데 도움이됩니다.

inclicitinterfaceimpletationingoembodiesducktypingBeyallowingTypestosatisfacesswithoutExplicitDeclaration.1) itpromotesflexibility 및 modularityfocusingOnbehavior.2) 도전 과제

GO 프로그래밍에서 오류를 효과적으로 관리하는 방법은 다음과 같습니다. 1) 예외 대신 오류 값 사용, 2) 오류 랩핑 기술 사용, 3) 사용자 지정 오류 유형 정의, 4) 성능에 대한 오류 값 재사용, 5) 경고와 함께 공황 및 복구 사용, 6) 오류 처리 전략을 기록하고, 오류 처리, 8) 오류를 사용하여 오류가 발생합니다. 이러한 관행과 패턴은보다 강력하고 유지 관리 가능하며 효율적인 코드를 작성하는 데 도움이됩니다.

GOROONE 및 채널을 사용하여 동시성을 구현할 수 있습니다. 1) Goroutines를 사용하여 예를 들어 음악을 즐기고 친구를 동시에 관찰하는 등의 작업을 병렬로 수행하십시오. 2) 생산자 및 소비자 모델과 같은 채널을 통해 고 루틴간에 데이터를 안전하게 전송합니다. 3) Goroutines와 교착 상태의 과도한 사용을 피하고 동시 프로그램을 최적화하기 위해 시스템을 합리적으로 설계하십시오.

GOOFFERSMULTIPLEAPLEACHELINDINGCURRENTDATDATDATDATRUCTRUCES (MUTEXES, 채널, 및 및 원자가 포함

go'serrorhandlingsexplicit, treatingerrorserSreturnEdValuesratherthanexceptions, 1) Go'sportroachensureserorawarensessbutcanleadtoverbosecode.2) pythonandjavauseexeceptionsforcleanercodebutmiserrors.3) go'smethodoTodoTand


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.