2013-05-12 34 views
8

Tôi đang cố gắng để có được websockets cũng làm việc với node-http-proxy. Sự khác biệt là tôi đang sử dụng một proxytable:Node http proxy với proxytable và websockets

var options = { 
router: { 
    'a.websterten.com': '127.0.0.1:150', 
    'b.websterten.com' : '127.0.0.1:151', 
} 
}; 

var server = httpProxy.createServer(options); 

tôi đã cố gắng:

server.on('upgrade', function (req, socket, head) { 
    server.proxy.proxyWebSocketRequest(req, socket, head); 
}); 

Nhưng nó dường như không làm việc. Một kiểm tra nhanh để xem liệu WebSockets công việc cho thấy tôi nhận được Unexpected response code: 400 từ Chrome (hoạt động tốt nếu tôi đi trực tiếp)

Cũng làm một vài kiểm tra server.on('upgrade',.. không bắn vào một yêu cầu WebSocket

Làm thế nào tôi có thể nhận được của tôi máy chủ proxy để định tuyến websockets chính xác?

Tôi cũng đã thử này trên nút 0.8.23 cũng như nút 0.10.x (các phiên bản sau của nút có một vấn đề rò rỉ bộ nhớ, nhưng nó sẽ không làm việc trên 0.8.23 hoặc)

Trả lời

2

Khi bạn sử dụng httpProxy.createServer(), không cần thiết để xử lý sự kiện upgrade vì proxy http xử lý tự động. Do đó, server.on('upgrade', ...) của bạn không bao giờ kích hoạt vì http proxy đã xử lý nội bộ.

Lần duy nhất bạn cần làm server.on('upgrade') là khi bạn chuyển các hàm phần mềm trung gian tới httpProxy.createServer hoặc nếu bạn đã tạo máy chủ theo cách thủ công với http.createServer().

Nói cách khác, websockets nên "chỉ hoạt động" thông qua proxy trong cấu hình của bạn.


Tuy nhiên, hỗ trợ WebSocket trong http-proxy là currently broken on node v0.10.x vì streams2 (API suối trong nút lõi were completely rewritten in 0.10). Ngoài ra, bản phát hành http-proxy gần đây nhất (0.10.2) bị hỏng trong nút v0.8 vì số botched fix đối với vấn đề luồng2.

Vì vậy, bạn có hai lựa chọn:

  1. Chờ cho http-proxy để viết lại ruột của nó để đối phó với streams2.
  2. Hạ cấp xuống nút v0.8.23 và http-proxy 0.10.1. (Ít nhất cho đến # 1 xảy ra.)

(Bạn có thể cài đặt phiên bản cũ của module NPM bằng cách chạy npm install [email protected].)

+0

Tôi đã cố gắng này, có và không có nâng cấp có gì xảy ra, tôi không còn nhận được lỗi hoặc cuối cùng là sự cố. Tôi đang sử dụng ví dụ về bảng proxy và chỉ sửa đổi tên máy chủ thành các tên khác, không có chỉnh sửa nào khác – Akshat

+0

@Akshat: Nghiên cứu sâu hơn cho thấy nó thực sự không tương thích với nút 0.10. Xem cập nhật. – josh3736

+0

Tôi thấy, tôi cũng gặp sự cố với 0.8.2 với bản cập nhật gần đây. Không có giải pháp cho việc này không? – Akshat

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