간단한 채팅 응용 프로그램 here을 socket.io 및 node.js와 함께 사용하려고합니다. node.js 서버를 다시 시작할 때마다 socket.io는 자동으로 다시 연결되며 어떻게 든 서버에 대한 연결을 한 번 더 만듭니다. 즉 클라이언트는 이제 동일한 채팅 메시지를 두 번받습니다. 이 문제를 어떻게 해결할 수 있습니까?socket.io 다시 연결하면 하나만 더 연결됩니다.
8
A
답변
13
기본적으로 연결을 끊으면 socket.io가 connect
이벤트를 다시 실행하는 연결이 끊긴 연결을 다시 연결합니다. 다시 연결할 때마다 메시지를 수신 할 이벤트 리스너를 하나 더 추가합니다. 따라서 서버 재시작/연결 손실과 동일한 수의 메시지가 수신됩니다. 당신은 처음에 귀를 기울여야
Incoming Chat:
Connected
dsdadsada
Disconnected //recieved by 1st listener
Connected //added 2nd listener
adasd
Disconnected //recieved by 1st listener
Disconnected //recieved by 2nd listener
Connected //added 3rd listener
는 이벤트 핸들러를 처음 실행되는 대신 on
의 once
를 사용하여 연결합니다.
iosocket.on('connect', function() {
$('#incomingChatMessages').append($('<li>Connected</li>'));
});
iosocket.on('message', function(message) {
$('#incomingChatMessages').append($('<li></li>').text(message));
});
iosocket.on('disconnect', function() {
$('#incomingChatMessages').append('<li>Disconnected</li>');
});
이 그것은 다른 두 이벤트 리스너에 의해 발생할 수 있습니다
가 등록되었습니다 대신이 방법으로 index.html을를 작성
iosocket.once('connect', function() {
대신
iosocket.on('connect', function() {
5
시도를보십시오 connect 이벤트. 클라이언트 연결이 끊어지면 다른 2 명의 리스너가 계속 여기에 있으며 등록이 해제되지 않습니다.
+1
귀하의 솔루션이 더 좋은 솔루션이라고 생각합니다. 여기서 중요한 것은 클라이언트 스크립트에 '연결'이벤트의 다른 이벤트가 있었음을 의미합니다. (연결 이벤트 바깥쪽에) –
관련 문제
- 1. 블루투스가 다시 연결됩니다
- 2. MediaRouter가 다시 연결됩니다.
- 3. TCPClient를 다시 연결하면 예외가 발생합니다.
- 4. Azure Mobile Services에서 호스팅되는 Socket.IO 서버에 연결하면 오류가 발생합니다.
- 5. socket.io 원격으로 연결할 때 다시 연결
- 6. socket.io 즉시 다시 시작하고 다시 시작합니다.
- 7. 쿼리에서 varchar를 연결하면 더 적은 결과가 반환됩니다.
- 8. IDataErrorInfo가 MVVM Light 메시징과 함께 다시 연결됩니다.
- 9. SignalR을 다시 연결하면 메모리 누수가 발생합니다.
- 10. 인터넷에 다시 연결하면 WebView가 복구되지 않음
- 11. Paho가 다시 연결하면 이전 주제를 구독하지 않습니다
- 12. Socket.IO 응용 프로그램은 더 출력, 시작하지
- 13. node.js + socket.IO - 소켓이 다시 연결되지 않습니까?
- 14. 토큰 만료 후 Google App Engine 채널 API가 다시 연결됩니다.
- 15. socket.io 서버 - 수신 대기 및 다시 시작
- 16. Socket.io node.js가 멈추어 프로세스를 다시 시작하지 않습니다.
- 17. Socket.io 연결 해제시 다시 연결 하시겠습니까?
- 18. socket.io 클라이언트를 다시 연결하지 않으려면 어떻게해야하나요?
- 19. wifi가 꺼지고 다시 활성화되면 socket.io iOS 클라이언트에 다시 연결하는 방법?
- 20. SQL 서버가 주기적으로 연결됩니다
- 21. 더 많은 AES 반복은 OutOfMemory Java 힙 공간으로 연결됩니다.
- 22. socket.io : 연결로 브라우저와 컴퓨터 연결
- 23. Socket.IO 1.0.4 Websocket Server
- 24. 다시 연결하면 Active Directory 인증 문제가 발생 함 - C#
- 25. 위치는 즉시 sigsegv로 연결됩니다.
- 26. AngularJS : socket.io destroy socket
- 27. 내 socket.io 코드에서 socket.io
- 28. socket.io 클라이언트가 socket.io
- 29. Wakelock은 USB 케이블로만 연결됩니다.
- 30. 소스가있는 NSTableView는 EXC_BAD_ACCESS로 연결됩니다.
이상적으로는 연결시 이벤트 리스너 (또는 다른 응용 프로그램 기능)를 추가하면 안됩니다. – Shamps
서버 측에서는 네임 스페이스를 사용하여 수정할 수 있습니다. 이렇게하면 서버에서 클라이언트의 발가락'connect' 이벤트에'once'를 사용할 수 있습니다. 슬프게도 우리는 서버에 직접'once'를 쓰지 않습니다 :'io.once ('connect', (socket : SocketIO.Socket) => {})'TS에서 컴파일 에러를 주었고'io.of ('/xyz').once('connect', (socket : SocketIO.Socket) => {})'는 잘 작동합니다. – Lion