HTML5 및 node.js로 실험 중입니다. Server Sent 이벤트를 테스트 한 결과 잘 작동했습니다 (this example 참조).HTTP에 응답 SSE로 가져 오기
다음 SSE가 포함 된 버튼 인쇄기에 답장을 시도했습니다. "Increment"버튼을 누르면 텍스트 상자에서 번호를 선택하고 GET 메시지를 사용하여 서버로 전달합니다. 그러면 서버는 증가 된 숫자를 포함하는 이벤트로 응답합니다. 그런 다음 eventListener는 수신 된 숫자로 텍스트 상자를 업데이트합니다. 또한 메시지를 기록하기 위해 HTML 페이지에 "메시지 영역"을 추가했습니다.
그건 계획이었습니다. 그러나 버튼을 클릭하면 브라우저 하단에 "다운로드 중"작업이 진행 중임을 나타내지 만 완료되지 않고 결과가 화면에 업데이트되거나 페이지 하단에 메시지가 표시되지 않습니다.
페이지가로드 될 때 이벤트를 보내면 문제가 없습니다. 그러나 GET 메시지에 대한 응답으로 HTML 페이지를 보내면 응답이 표시되지 않습니다.
다음은 HTML 섹션입니다.
<form action="/upload" method="get">
<p>Set the temperature and click on send</p>
<input name="temperature" id="TemperatureBox" type="text" value = "33" />
<button type="submit" onclick="form.action='http://localhost:8888/Increment'">Increment</button>
나는 메시지와 Node.js를 스크립트에서 온도 상자
var source = new EventSource('/events');
source.addEventListener('message', function(e) {
//code to display message
}, false);
source.addEventListener('TemperatureValueUpdate', function(e) {
AddLog('TemperatureValueUpdate Listener >> lastEventID: ' + (e.lastEventId || '--') +
', e.data: ' + e.data
+ 'Current value of text box: ' + document.getElementById('TemperatureBox').value);
document.getElementById('TemperatureBox').value= e.data;
}, false);
를 업데이트하는 "온도 이벤트"나는 메시지와를 보내고에 대한 처리기를 추가 한 TemperatureValueUpdate
function constructTemperature(response, id, data) {
console.log("Sending Temperature event");
// response.write('id: ' + (new Date()).toLocaleTimeString()+ '\n');
// response.write("data: " + 'Teperature event sent '+ '\n\n');
response.write('event: ' + 'TemperatureValueUpdate' + '\n');
response.write('id: ' + id + '\n');
response.write("data: " + data + '\n\n');
console.log("Finished Temperature event"); }
또한 "페이지/이벤트"URL에 응답했습니다. 200 응답과 전자 부하 :
response.writeHead(200, {'Content-Type': 'text/event-stream','Cache-Control': 'no-cache', 'Connection': 'keep-alive' });
나는 전에도)는으로 Response.End를 (보내는 이벤트를
- 를 시도/보낸 후 는 A 'Content-Type을'보내기 이벤트
- : 각 이벤트
전에 '텍스트/이벤트 스트림을'그러나 그들은 데 생성하지 않는 싫어하는 결과. 여기서 내가 뭘 잘못하고 있니?
내가 이해할 수 있는지 보겠습니다. 페이지를 시작할 때 url은 http : // localhost : 8888 // MyApp입니다. 버튼을 누르면 URL은 http : // localhost : 8888/Increment? temperature = 33'입니다. 다른 연결에 의해, 내 경로명이 응용 프로그램 전체에서 동일하게 유지되어야한다고 말하는 것입니까? 그래서 숫자를 증가시키기 위해서 나는 현재의 것 대신에'http : // localhost : 8888 // MyApp? operation = Increment & temperature = 33'과 같은 것을 사용해야합니다. – DPD
아닙니다. EventSource가 이벤트를 찾고있는 URL은'http : // localhost : 8888/events'입니다. 해당 URL의 응답에는'constructTemperature()'함수의 응답이 포함되어야합니다. – Maurice
모든 HTTP 요청에 대한 URL을 'http : // localhost : 8888/MyApp'로 변경하고 이벤트 소스를'var source = new EventSource ('/ MyApp ');'로 등록하려고 시도했습니다. 나는 'req.headers.accept =='text/event-stream '조건에 따라 차별화된다. 유일한 차이점은 브라우저가 다운로드 상자를 영원히 보여주지는 않지만 문제는 여전히 지속된다는 것입니다. – DPD