2012-10-20 36 views
6

Trong máy chủ websocket của tôi được phát triển với Erlang, tôi muốn sử dụng bộ hẹn giờ (start_timer/3), cho mỗi kết nối, để chấm dứt kết nối nếu hết thời gian chờ mà không nhận được "ping" từ máy khách.Quy mô giờ Erlang có quy mô không?

Đồng hồ Erlang có hoạt động tốt không, giả sử tôi sẽ có một số lượng lớn các kết nối khách hàng?

Trả lời

8

Số lượng kết nối lớn là gì? Erlangs VM sử dụng một bánh xe hẹn giờ trong nội bộ để xử lý các bộ đếm thời gian để nó vảy khá tốt lên đến một số nghìn kết nối. Sau đó, bạn có thể gặp rắc rối.

Thông thường, mẹo là nhóm các nhóm lại với nhau theo giờ. Đây cũng là những gì hạt nhân có xu hướng làm. Ví dụ, nếu bạn có một bộ đếm thời gian phải tỉnh táo trong 200ms, bạn sẽ tự lên lịch trước thời gian không phải trong lần tiếp theo, mà là bộ hẹn giờ 200ms tiếp theo. Điều này có nghĩa là bạn sẽ đợi ít nhất 200ms và có lẽ 400ms, 300ms là điển hình. Bởi xấp xỉ bộ đếm thời gian như thế này, bạn có thể chạy nhiều hơn nữa vì bạn có thể có một bộ đếm thời gian duy nhất đánh thức số lượng lớn các quy trình trong một lần. Nhưng tùy thuộc vào tần số hẹn giờ và số lượng bộ đếm thời gian một tiêu chuẩn send_after/3 có thể là đủ.

Trong mọi trường hợp, tôi sẽ bắt đầu bằng cách giả sử nó có thể mở rộng và xử lý sự cố nếu không thể thực hiện thời gian gần đúng như được hình dung ở trên.

0

Mẫu thông thường cho loại máy chủ này là tận dụng các quy trình Erlang trọng lượng nhẹ và tạo máy chủ cho mỗi kết nối.

Bạn có thể xây dựng ví dụ máy chủ của bạn sử dụng một hành vi gen_server mà cung cấp cho bạn cả

  • trạng thái khác nhau để quản lý các kết nối (chờ đợi một kết nối, đăng nhập, ...) với các biến Nhà nước,
  • thời gian chờ cá nhân cho mỗi kết nối và ở mỗi tiểu bang, được quản lý bởi VM và hành vi OTP.

Điều tốt đẹp là mỗi máy chủ phải chăm sóc một khách hàng duy nhất, do đó, việc viết thư này thực sự dễ dàng hơn.

Giai đoạn init nên khởi động một máy chủ chờ đợi kết nối,

Sau đó kết nối máy chủ nên khởi động một cái mới đã sẵn sàng cho khách hàng tiếp theo (lý tưởng thông qua một người giám sát tung ra con simple_one_for_one) và đi đến login bước hoặc bất cứ điều gì bạn muốn làm.

Bạn sẽ tìm thấy thông tin rất thú vị trên trang web LearnYouSomeErlang, đặc biệt trong chương http://learnyousomeerlang.com/supervisors và các mục sau đây.

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