tôi có thể tạo kết nối của tôi đến một máy chủ như thế này:Làm thế nào để kiểm tra xem một ví dụ twisted.internet.protocol đã bị ngắt kết nối
connection = TCP4ClientEndPoint(reactor, server_host, server_port)
factory = Factory()
factory.protocol = Protocol
protocol = yield connection.connect(factory)
protocol.doSomething() # returns a deferred
Bây giờ, trong một số phương pháp khác, nơi tôi có một xử lý về đối tượng giao thức này Tôi muốn kiểm tra xem giao thức vẫn được kết nối hay không, như sau:
if protocol.isConnected():
doSomethingElse()
Có cách nào để thực hiện việc này không. Tôi nhìn vào tài liệu xoắn và không thể tìm thấy một phương pháp có liên quan. Đặt cờ trong callLost() gọi lại là một tùy chọn, nhưng tôi đã tự hỏi nếu tôi có thể tránh làm điều đó.
cảm ơn! Tôi không phải rất quen thuộc với các thực hành thiết kế với xoắn. Bằng phương pháp vòng đời, bạn có nghĩa là tôi nên làm tất cả công việc của mình trong hàm callMade(), và không cần phải gọi một cách rõ ràng cái gì đó giống như protocol.doSomething()? – AnkurVj
Có. Bằng cách chạy tất cả các hành vi cần thiết từ các phương thức gọi lại, bạn tránh sự cần thiết của trạng thái theo dõi (thường dễ bị lỗi) bởi vì bạn chỉ cần thực hiện các công việc khi nó cần được thực hiện. Lưu ý rằng điều này là ** mong muốn **, nhưng không phải luôn luôn ** có thể **. Một số thiết kế chỉ cần cờ như trên. Cố gắng tránh nó, nhưng đừng làm hỏng codebase của bạn trong một nỗ lực để thực hiện theo thực hành tốt nhất :) – slezica
Thật vậy. Tôi đã tìm thấy nó rất khó khăn để làm điều đó tất cả trong callbacks! Ví dụ tôi đã phải cung cấp cho các đối tượng giao thức một số biến bổ sung sau khi kết nối và trước khi nó đã làm bất cứ điều gì, nhưng không biết làm thế nào để làm điều đó! Tôi đã phải thực hiện 'protocol.val = val' và sau đó gọi' protocol.doSomething() 'thay vì thực hiện' self.doSomething() 'trong' connectionMade() 'callback – AnkurVj