Tôi đang thử một ứng dụng trò chuyện đơn giản here với socket.io và node.js. Mỗi lần tôi khởi động lại máy chủ node.js, socket.io sẽ tự động kết nối lại và bằng cách nào đó tạo thêm một kết nối tới máy chủ, tức là máy khách hiện nhận được cùng một tin nhắn trò chuyện hai lần. Làm thế nào để sửa lỗi này?socket.io tạo một kết nối khác sau khi kết nối lại
Trả lời
Theo mặc định trên ngắt kết nối socket.io kết nối lại kết nối bị mất, chạy lại sự kiện connect
. Vì vậy, mỗi khi nó kết nối lại, bạn thêm một trình xử lý sự kiện để nhận tin nhắn. Vì vậy, bạn nhận được nhiều thông báo bằng máy chủ khởi động lại/mất kết nối.
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
Bạn nên lắng nghe người đầu tiên kết nối sử dụng once
thay vì on
, chạy eventhandler lần đầu tiên mà thôi. Hãy thử
iosocket.once('connect', function() {
thay vì
iosocket.on('connect', function() {
Cố gắng viết index.html theo cách này thay vì:
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>');
});
Nó có thể được gây ra bởi 2 eventlisteners khác đã được đăng ký sự kiện kết nối. Khi khách hàng bị ngắt kết nối, 2 người nghe khác sẽ vẫn ở đây và không bị đăng ký.
Tôi nghĩ giải pháp của bạn tốt hơn. NHỮNG ĐIỀU QUAN TRỌNG Ở ĐÂY LÀ R INNG TRONG L SCRNH VỰC KHÁCH HÀNG, BẠN BAO GIỜ CÁC SỰ KIỆN KHÁC TỪ SỰ KIỆN 'CONNECT'. (XIN VUI LÒNG TRÊN NGOÀI SỰ KIỆN CONNECT) –
- 1. Liệu socket.io có kết nối lại kết nối lại không?
- 2. Socket.io - Hướng dẫn kết nối lại sau khi ngắt kết nối phía máy khách
- 3. Kết nối NodeJS + Socket.io giảm/kết nối lại?
- 4. Làm thế nào để kết nối lại máy khách socket.io hoạt động sau khi tự động kết nối lại lần?
- 5. Cách tự động kết nối lại hồ bơi kết nối Oracle sau khi ngắt kết nối?
- 6. Node.js: socket.io đóng kết nối máy khách
- 7. Kết nối lại kết nối ổ cắm Java khi ngắt kết nối
- 8. Tạo danh sách Khách hàng được kết nối bằng socket.io
- 9. Xóa các đối tượng khi ngắt kết nối socket.io
- 10. Làm thế nào để tôi kết nối lại một cách hiệu quả boost :: socket sau khi ngắt kết nối?
- 11. Nhiều kết nối socket.io trên cùng một trang
- 12. Ngăn đặt lại khi kết nối màn hình nối tiếp?
- 13. Ngắt kết nối SignalR không được gọi là kết nối internet/kết nối lại
- 14. Kết nối Perl Kết nối
- 15. perl dbi kết nối lại trên ngắt kết nối
- 16. Kết nối lại ổ đĩa mạng đã ngắt kết nối
- 17. Cách mô phỏng lỗi kết nối trong Socket.IO
- 18. kết nối hai khách hàng với socket.io qua node.js
- 19. nodejs kết nối kết nối net
- 20. kết nối socket.io parse (> = 2.4.1) cookie phiên đã ký
- 21. Làm cách nào để kết nối lại với thiết bị sau khi ngắt kết nối trong Lõi Bluetooth
- 22. Tại sao tôi nhận kết nối bị từ chối sau khi kết nối 1024?
- 23. Java HttpURLConnection không kết nối khi tôi gọi kết nối()
- 24. Reconnect socat kết nối sau khi thất bại mạng
- 25. Socket.io: Cách xử lý các kết nối đóng?
- 26. socket.io: ngắt kết nối sự kiện không được kích hoạt
- 27. nodejs socket.io không thể kết nối với máy chủ?
- 28. cách trả lại kết nối trong c3p0
- 29. Tại sao kết nối Socket.io chậm trên Safari và Chrome
- 30. Ngã ba trước hoặc sau khi chấp nhận kết nối?
Lý tưởng nhất là bạn không nên thêm trình xử lý sự kiện (hoặc bất kỳ tính năng ứng dụng nào khác) vào kết nối. – Shamps
Ở phía máy chủ, điều này có thể được sửa bằng cách sử dụng không gian tên. Điều này cho phép bạn sử dụng 'once' cho sự kiện' connect' của ngón chân của máy khách trên máy chủ. Đáng buồn thay, chúng tôi không có 'một lần' cho máy chủ trực tiếp:' io.once ('connect', (socket: SocketIO.Socket) => {}) 'đưa ra một lỗi compilining trong TS, trong khi' io.of ('/xyz').once('connect', (socket: SocketIO.Socket) => {}) 'hoạt động tốt. – Lion