2011-09-12 10 views
10

Tôi hy vọng điều này không xảy ra như một câu hỏi ngớ ngẩn, nhưng tôi đang tìm hiểu cách triển khai máy chủ socket.io cho trang web của mình để tạo các ứng dụng thời gian thực, nhưng vấn đề của tôi là tôi không thể tìm ra cách để thực hiện các ứng dụng đã nói trong môi trường phục vụ Apache. Hiện tại, khi tôi chạy node server.js để khởi động máy chủ socket.io của mình, tôi phải truy cập nó bằng cách truy cập http://localhost:XXXX trong đó XXXX là bất kỳ cổng nào tôi đính kèm vào một cách tự nhiên. Tôi không muốn trang web của tôi bị buộc phải được xem trên một cổng thay thế như thế này, nhưng tôi rõ ràng không thể đính kèm máy chủ vào cổng 80 vì Apache đang nghe về điều đó. Rõ ràng là một giải pháp tự nhiên sẽ là dừng dịch vụ Apache và sau đó nút máy chủ trên cổng 80 theo cách đó để tránh va chạm, nhưng tôi không muốn hy sinh tất cả các chức năng mà Apache cung cấp. Về cơ bản, tôi muốn tiếp tục phục vụ trang web của mình thông qua Apache trên cổng 80 và tích hợp các khía cạnh nhất định của các ứng dụng thời gian thực thông qua socket.io trên cổng 3000, giả sử.Truy cập máy chủ socket.io qua các trang được phục vụ của Apache

Có cách nào để thực hiện việc này tránh những thứ tôi không muốn không? Những thứ đó là 1) khi người dùng truy cập trang web của tôi với số :3000 trong URL, 2) tắt Apache, 3) bằng iframe.

Xin cảm ơn trước.

Trả lời

3

Nói chung, bạn sẽ có thể ẩn Node.js bằng mod_proxy. Một chút tìm kiếm đã bật lên điều này: https://github.com/sindresorhus/guides/blob/master/run-node-server-alongside-apache.md (liên kết cũ đã chết, đây là một liên kết mới)

Tuy nhiên, Socket.io có thể hơi khó tính (https://github.com/LearnBoost/socket.io/issues/25), vì vậy bạn có thể gặp sự cố với điều này một cách cụ thể.

Vì vé đó hơi cũ, nên đáng để chụp. Chỉ cần không ngạc nhiên nếu bạn có vấn đề. Bạn đặt cược tiếp theo sau đó được ràng buộc Node.js toport 80 và có nó hoạt động như một proxy ngược cho Apache với https://github.com/nodejitsu/node-http-proxy (vẫn còn dưới một chút công bằng của phát triển).

Giải pháp tối ưu sẽ chạy trên máy chủ của chính nó và chỉ có lưu lượng truy cập socket đến socket.example.com hoặc một cái gì đó tương tự.

+0

Phương pháp được liệt kê thứ hai là những gì tôi đã thực hiện cho đến nay, mặc dù nó yêu cầu khá nhiều cấu hình lại các chỉ thị Apache. Bây giờ nó được thực hiện, tôi cảm thấy như toàn bộ quá trình đã được truy cập trực quan và đã không thực sự để lại cho tôi gần gũi hơn với những gì tôi cần để đạt được, ngoài việc ràng buộc cả hai máy chủ đến cổng "tương tự". Tôi nghĩ rằng tôi sẽ xem xét nhiều hơn vào mod_proxy và xem nếu đó không phải là một giải pháp thận trọng hơn. Một vấn đề định kỳ là tôi không nhất thiết phải phục vụ toàn bộ tài liệu với socket.io .. chỉ đơn thuần là WIDGETS trên các trang được chọn. Một "div được chuyển", nếu bạn muốn. –

+0

Liên kết đầu tiên bạn đề cập đến là đã chết –

+0

Được cập nhật bằng liên kết mới –

2

Socket.io có nhiều cơ chế truyền tải. Một số người trong số họ không làm việc nếu bạn chạy Apache như proxy ngược lại, nhưng một số làm. Giao thông vận tải không hoạt động là websocket và flash, nhưng xhr-polling và jsonp-polling sẽ hoạt động.

Dưới đây là một ví dụ về cách thiết lập các tùy chọn cấu hình vận tải cho socket.io:

var io = require("socket.io").listen(server); 
io.set("transports", ["xhr-polling", "jsonp-polling"]); 

On Apache của tôi Tôi đang sử dụng bình thường name based virtual hosts and reverse proxy setup và với những vận chuyển các socket.io dường như được làm việc.