Tôi đang phát triển một ứng dụng. Máy chủ MongoDB được lưu trữ trên một máy chủ từ xa. Vì vậy tôi rất thích sử dụng socketTimeoutMS: 30000
để đảm bảo sẽ xảy ra lỗi - và tôi có thể ghi lại sự cố trong ứng dụng của mình.
Tôi đã thử sử dụng URL, nó sẽ là MONGO_URL
设置为 mongodb://localhost/ddd18?socketTimeoutMS=4000'
.
Hoặc sử dụng các tùy chọn:
require('mongodb').MongoClient.connect(process.env.MONGO_URL, { server: { socketOptions: { socketTimeoutMS: 6500, connectTimeoutMS: 6500 } } } , function( err, db ){
或者:
require('mongodb').MongoClient.connect( process.env.MONGO_URL, { mongos: { socketOptions: { socketTimeoutMS: 6500, connectTimeoutMS: 6500 } } } , function( err, db ){
hoặc các kết hợp tùy chọn khác (ví dụ: trực tiếp { socketOptions: { socketTimeoutMS: 6500, connectTimeoutMS: 6500 } }
甚至 { socketTimeoutMS: 6500, connectTimeoutMS: 6500 }
).
Nếu tôi làm như sau:
- Chạy ứng dụng của tôi (có thể kết nối tốt với MongoDB)
- Tiêu diệt hoàn toàn MongoDB
- Cố gắng thực hiện hành động
Nỗ lực sẽ bị treo vĩnh viễn. Trên thực tế, nó sẽ bị kẹt ở đó và cuối cùng khi tôi khởi động lại MongoDB, thao tác sẽ thực sự bắt đầu và hoàn tất.
Vấn đề tôi gặp phải là khách hàng của tôi có thời gian chờ 30 giây. Nếu máy chủ không thực hiện việc này và vì lý do nào đó nó im lặng trong vài phút, thì tất cả các hoạt động được khách hàng báo cáo là "không thành công" sẽ thực sự xảy ra - điều này thật ngớ ngẩn.
Tôi đã làm gì sai à?
Các tài liệu liên quan:http://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html
Câu trả lời rất đơn giản: ổ cắm không hết thời gian chờ. auto_reconnect được đặt thành true và máy chủ tiếp tục cố gắng kết nối lại - và không có lỗi nào được đưa ra
Tôi là một lập trình viên xuất sắc, rất giỏi!