2013-02-21 27 views
8

Đây là mã của tôi:Nghe đến một địa chỉ IP khác nhau

var server = express(); 

// Create the HTTP server 
http 
    .createServer(server) 
    .listen(80, '10.10.10.10'); 

Khi máy chủ đã được bắt đầu, làm thế nào tôi có thể tự động thay đổi địa chỉ IP nghe, nói với 11.11.11.11 thay vì 10.10.10.10. Có phương thức "không công khai" không?

+0

Bạn đang cố gắng để thực hiện? – robertklep

+0

@robertklep: Tôi muốn khởi động lại máy chủ bằng một địa chỉ IP khác mà không làm hỏng quy trình. – Randomblue

Trả lời

23

bạn phải sử dụng server.close() không app.close() ..

var express = require('express') 
    , http = require('http') 
    , app = express() 
    , server = http.createServer(app) 

app.get('/',function(req,res){ 
    ... 
}) 

server.listen(8000,'127.0.0.1',function(){ 
server.close(function(){ 
    server.listen(8001,'192.168.0.202') 
}) 
}) 

nên làm việc

+0

Cảm ơn. Tôi đã thử nó, và 'server.close' sẽ không hủy bỏ địa chỉ' 127.0.0.1'. – Randomblue

+0

có thể có một số kết nối mở? xem http://nodejs.org/api/net.html#net_server_close_callback – supernova

+0

Không. Tôi thậm chí còn nhận được một ngoại lệ không bị bắt buộc '[Lỗi: Không chạy]'. – Randomblue

1

Tôi nghĩ rằng "unlisten" chức năng bạn đang tìm kiếm được gọi là "gần": http://nodejs.org/api/http.html#http_server_close_callback

+0

Điều đó không hoạt động với Express. 'Ngoại lệ không được dạy! [TypeError: Ứng dụng hàm đối tượng (req, res) {app.handle (req, res); } không có phương pháp 'đóng'] ' – Randomblue

0

gì bạn đang cố gắng để đạt được là khá phi tiêu chuẩn theo ý kiến ​​của tôi. Tôi sẽ đề xuất server.close(). Đóng sẽ chờ tất cả yêu cầu hoàn tất và kích hoạt sự kiện "đóng". Bạn có thể liên kết trên sự kiện đó để nghe trên IP mới. Điều này khá kỳ lạ.

+0

Điều đó không hoạt động với Express. 'Ngoại lệ không được dạy! [TypeError: Ứng dụng hàm đối tượng (req, res) {app.handle (req, res); } không có phương pháp 'đóng'] ' – Randomblue

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