Thông báo xuất hiện hai mươi phút sau khi kết nối. Bộ đếm bên dưới đã chạy từ sáng hôm trước, hoặc từ lần xác thực cuối của tài khoản, và không có gì trong cảnh báo nói là cái nào. Đó là triệu chứng: một lời nhắc gắn với thứ khác, không phải kết nối đang ở trước mặt bạn.

Cách sửa không phải là cảnh báo tốt hơn. Đó là quyết định yêu cầu muốn nói tới chiếc đồng hồ nào, rồi neo bộ hẹn giờ vào một đối tượng tồn tại trong chiếc đồng hồ đó.

Cái gì đã kích hoạt, và nó đang đếm cái gì

Ba nguồn khả dĩ tạo ra cùng một thông điệp. Một quy tắc lịch chạy theo giờ địa phương cố định và không biết gì về đường hầm. Một bộ đếm trong ứng dụng khách tích lũy khi bất kỳ kết nối nào đang hoạt động và sống sót qua các lần kết nối lại. Một chính sách cổng làm phiên hết hạn ở phía máy chủ và gửi cảnh báo trước.

Chỉ hai nguồn cuối liên quan tới một phiên, và ngay cả chúng cũng không đồng ý với nhau. Bộ đếm của ứng dụng khách đo những gì tiến trình cục bộ quan sát được; cổng đo những gì nó đã xác thực và tính sổ. Ngủ máy, đổi mạng hoặc khởi động lại bộ quan sát có thể tách hai bên hàng giờ, và đó là lý do cảnh báo và thời điểm hết hạn bị áp đặt lệch nhau.

Ba chiếc đồng hồ sau một yêu cầu

Hãy bắt đầu bằng việc viết ra câu bạn thực sự muốn. Cảnh báo trước khi cổng kết thúc kết nối này không phải cùng một yêu cầu với nhắc nhở sau một ngày thời gian đã kết nối. Cũng không phải việc báo rằng phiên này đã hoạt động 23 giờ. Mỗi phiên bản nêu một sự kiện khác nhau, và một thành phần khác phải trả lời nó.

Sau đó kiểm tra xem dữ liệu có tồn tại không. Dấu thời gian bắt đầu cục bộ cho bạn tuổi của phiên mà không phụ thuộc máy chủ. Chính sách cổng cho bạn thời gian sống còn lại, nhưng chỉ khi cổng công bố nó. Báo cáo sử dụng cho bạn thời lượng sau khi việc đã xảy ra, và điều đó không thể điều khiển thông báo trước.

Neo bộ hẹn giờ vào phiên, không vào tài khoản

Chọn đối tượng trước. Một tài khoản có thể chứa nhiều thiết bị và nhiều phiên đồng thời, nên một lời nhắc khóa theo tên người dùng không thể nói kết nối nào đã đạt tuổi đó. Khóa nó theo hồ sơ cùng lần kích hoạt đó, và hủy thông báo đang chờ khi lần kích hoạt kết thúc.

Evidence you can readWhat it establishesWhere it misleads
Connection state changes to activeA session started nowDoes not carry the gateway's own session identifier
Duration reported at disconnectTotal service time for that sessionArrives too late for any advance notice
Interim usage updateTime accounted up to that updateStaleness equals the update interval
Local timestamp taken at activationAge of your observationResets whenever the observer restarts

Bảng đó là hợp đồng cho bộ thông báo của riêng bạn, không phải mô tả API gọi lại của bất kỳ ứng dụng khách nào. Những gì sản phẩm đã cài đặt ghi nhận về trạng thái kết nối chính là nguồn để neo vào; ở nơi nó chỉ công bố sự kiện xác thực, hãy nói to điều đó và chấp nhận hành vi thô hơn thay vì suy ra một phiên.

Thử bằng một ngưỡng ngắn

Đừng bao giờ gỡ lỗi một bộ hẹn giờ một ngày bằng một ngày chờ đợi. Thêm một ngưỡng có thể cấu hình, đặt nó ở ba mươi giây, và chạy bốn chuyển trạng thái theo thứ tự: kết nối, chờ, ngắt, kết nối lại. Mỗi chuyển trạng thái phải tạo ra đúng một thay đổi trạng thái, và việc kết nối lại phải lên lịch một hạn mới thay vì thừa hưởng hạn cũ.

# current connection state and profile identity
nmcli -f GENERAL.STATE,GENERAL.CONNECTION connection show work

# the notifier unit you wrote: does it restart the deadline or resume it?
journalctl --user -u vpn-timer.service --since "-5 min" -o cat

Hãy nhìn dấu thời gian, không phải câu chữ. Một thông báo đến kèm giờ bắt đầu của phiên trước đã neo nhầm đối tượng, và một thông báo đến hai lần cho cùng một hạn nghĩa là cờ đã gửi chưa bao giờ được lưu.

Ngủ máy, kết nối lại và lần giao bị mất

Ngủ máy phá vỡ cả hai thiết kế ngây thơ. Đồng hồ đếm ngược đơn điệu dừng khi máy ngủ, hạn theo đồng hồ treo tường vẫn tiếp tục dịch, và bộ hẹn giờ kích hoạt trong lúc ngủ sẽ được giao muộn hoặc không được giao. Hãy quyết định hành vi nào yêu cầu của bạn cần, rồi cho máy ngủ vượt ngưỡng và xác nhận.

Việc giao nhận cũng đáng được chăm sóc như vậy. Nếu không thể hiển thị thông báo, hãy đưa nó vào hàng đợi, và kiểm tra lại xem phiên đích còn tồn tại không trước khi hiển thị lần cuối; nếu không, người dùng bị cảnh báo về một kết nối đã kết thúc. Ngắt kết nối cưỡng bức và gia hạn thông tin đăng nhập nằm ngoài đường đi này, vì một lời nhắc âm thầm thay đổi vận mệnh của kết nối là quyết định chính sách khoác áo thông báo.

Bài viết liên quan