2013-01-15 37 views
7

Câu hỏi này liên quan đến các phiên bản socket.io < 0.9.x. Phiên bản mới hơn có các phương tiện vận chuyển khác nhau và phương pháp thiết lập phương tiện vận chuyển.node.js và socket.io. cấu hình kiểu vận chuyển cho websocket?

Tôi kiểm tra nút js và socket.io trong hai tuần. khi tôi bắt đầu, tôi gặp vấn đề với chức năng socket.send(message) trong ứng dụng khách. Tôi không thể gửi bất kỳ tin nhắn nào đến máy chủ. Nhưng tôi vẫn có thể nhận tin nhắn từ máy chủ. Tôi giải quyết vấn đề này khi tôi phát hiện việc vận chuyển cấu hình của phía máy chủ:

socket.set('transports',[ 
    'xhr-polling' 
    , 'jsonp-polling' 
]); 

Tất cả mọi thứ tốt. Bây giờ tôi cũng có thể gửi tin nhắn đến máy chủ. Nhưng tôi vẫn có một câu hỏi tại sao tôi phải cấu hình vận chuyển. Mặc định socket.io sử dụng cài đặt vận chuyển websocket như sau:

socket.set('transports', [ 
    'websocket' 
    , 'flashsocket' 
    , 'htmlfile' 
    , 'xhr-polling' 
    , 'jsonp-polling' 
]); 

để sử dụng websocket lúc đầu, không phải xhr-polling. Nhưng máy chủ không thể nhận bất kỳ tin nhắn nào được gửi từ máy khách khi sử dụng socket.send(msg) thậm chí socket.emit(...).

Vì vậy, vấn đề là: những gì không hỗ trợ websocket ở đây? trình duyệt hoặc node.js ... Tôi xin lỗi nhưng tôi đã tìm kiếm rất nhiều trang từ google và tôi đã không tìm thấy câu trả lời cho điều này.

tôi sử dụng Node.js phiên bản 0.8.16, socket.io phiên bản 0.9.13 và các trình duyệt mới nhất: chrome, firefox, opera

Tôi muốn sử dụng WebSocket không XHR-bỏ phiếu.

Trả lời

5

Điều đó thật kỳ lạ bởi vì ngay cả khi websockets không được cấu hình máy chủ của bạn hỗ trợ, socket.io sẽ chọn phương thức khả dụng tốt nhất tiếp theo (trong trường hợp xhr-polling). Trên thực tế, bạn thậm chí không cần phải đặt những phương tiện đó là socket.io sẽ cố gắng sử dụng 'websocket' làm phương thức chính theo mặc định. Điều này có thể cho thấy một số vấn đề khác, có thể với mã của bạn?

Điều gì không hỗ trợ websockets chắc chắn không phải là trình duyệt bạn đang sử dụng cũng không phải node.js. Điều này sẽ phụ thuộc vào thiết lập máy chủ của bạn.

séc đầu tiên:

  1. Cổng bạn đang nghe là mở trong tường lửa của bạn
  2. webserver của bạn hỗ trợ WebSockets. Nếu bạn đang sử dụng Apache và proxing yêu cầu của bạn đến một địa chỉ IP nội bộ: PORT, WebSocket sẽ không làm việc trừ khi bạn cài đặt một cái gì đó giống như apache-websocket hoặc pywebsocket

gì cuối cùng giải quyết vấn đề của tôi là để vô hiệu hóa Apache lắng nghe trên cổng 80 và có node.js nghe trên cổng đó. Đây là câu trả lời trên SO đã giúp tôi: https://stackoverflow.com/a/7640966/2347777

Các vấn đề liên quan