2010-07-09 21 views

Trả lời

29

Middleware liên quan đến Rack, API Ruby chuẩn cho các ứng dụng web. Vì các ứng dụng Rails là các ứng dụng Rack trong những ngày này, chúng áp dụng cho cả hai.

Giá trung gian là mọi thứ giữa các máy chủ ứng dụng (Webrick, Thin, Unicorn, Passenger, ...) và ứng dụng thực tế, chẳng hạn như ứng dụng Rails của bạn. Đây là pipeline giữa máy chủ ứng dụng web và chính ứng dụng đó.

Đầu vào cho ứng dụng Rack là "môi trường" chứa tất cả chi tiết yêu cầu HTTP (và nhiều hơn nữa). Đầu ra là một phản hồi HTTP. Lớp trung gian giống như bộ lọc có thể sửa đổi đầu vào, đầu ra hoặc cả hai. Rails sử dụng phần mềm trung gian để implement some of its features (truy vấn bộ nhớ đệm, cửa hàng cookie, mở rộng phương pháp http), nhưng bạn có thể thêm của riêng bạn.

Giá phần mềm trung gian là một cách hiệu quả để tái sử dụng hành vi liên quan đến web đơn giản trên các ứng dụng web sử dụng Rack, bất kể khung bên dưới. Nếu một phần của ứng dụng của bạn thêm chức năng, nhưng không chịu trách nhiệm đối với phản hồi HTTP, nó đủ điều kiện là phần mềm trung gian Rack.

Một số ví dụ về những điều bạn có thể thực hiện như Rack middleware bao gồm:

  • HTTP bộ nhớ đệm (phía máy chủ và phía khách hàng)
  • Logging
  • Xác thực
  • Giám sát
  • HTTP header lọc

Xem cũng this SO question.

0

Hãy xem CodeRack có thể giúp bạn hiểu một số khả năng là gì. Bây giờ khi bạn hỏi rằng bạn thường nghe về nó trong bối cảnh của Ruby on Rails, bạn có thường hỏi phần mềm trung gian là gì không?

3

Hãy tưởng tượng bạn muốn tạo dịch vụ lưu vào bộ nhớ cache. Dịch vụ bộ nhớ đệm này sẽ là ứng dụng bất khả tri để bạn có thể sử dụng nó với nhiều ứng dụng. Bạn cũng muốn hỗ trợ rất nhiều máy chủ web khác nhau.

Lưu ý cách loại ngồi ở giữa máy chủ và khung công tác? Đó là một ví dụ về phần mềm trung gian. Nó không phải là ứng dụng logic và không thực sự là công cụ mạng cấp thấp, nhưng cung cấp một dịch vụ ở đâu đó ở giữa. Một số ví dụ là QoS (chất lượng dịch vụ), Bảo mật, bộ nhớ đệm, ...

Sẽ rất tuyệt nếu dịch vụ của bạn hỗ trợ tất cả các máy chủ phổ biến (và một số máy chủ không phổ biến) được, webrick). Nếu bạn ủng hộ họ, tất cả mọi người có thể sử dụng phần mềm tuyệt vời của bạn. Bạn có thể thấy rằng làm cho điều này xảy ra sẽ là một kéo thực sự, bạn sẽ cần phải hỗ trợ mỗi máy chủ với mã máy chủ đặc biệt cụ thể.

Bây giờ, đó chỉ là một nửa vấn đề vì cũng có một số khung công tác web. Rails là khỉ đột 500 lb nhưng có các khung khác, chẳng hạn như Merb và Sinatra. Hỗ trợ các dịch vụ này trong dịch vụ lưu bộ nhớ cache của bạn là một số khác là m những thứ khác nhau để hỗ trợ. Bây giờ bạn đang hỗ trợ n x m các đường dẫn khác nhau. Thật là một sự kéo.

Nhập Rack. Rack nằm giữa các khung công tác và các máy chủ và cung cấp cho bạn một giao diện để mã hóa máy chủ bộ nhớ đệm của bạn. Nếu các máy chủ và khung công tác hỗ trợ rack, và hầu hết các dịch vụ của bạn chỉ cần hỗ trợ giao diện rack và bạn sẽ nhận được hỗ trợ cho tất cả các khung công tác và các giá đỡ dịch vụ. (Đó là một chút như latex biên dịch để dvi và sau đó chuyển dvi vào ps, pdf, ....). Bạn không cần một công cụ chuyển đổi từ Merb sang WEBrick và một trình chuyển đổi khác từ Sinata thành Thin. Nếu dịch vụ lưu bộ nhớ đệm của bạn hỗ trợ giá, bạn sẽ được cách ly khỏi sự khác biệt.

Với "eo hẹp" này, nơi tất cả các m-framework kết hợp với nhau trước khi phân nhánh tới máy chủ n giữa ứng dụng và máy chủ, bạn cũng có thể xem nó cung cấp một vị trí tốt để thêm chức năng như định tuyến, ghi nhật ký, tĩnh phục vụ mà bỏ qua sự chậm chạp của khuôn khổ diễn giải của bạn, v.v.

+1

Giá không chính xác là phần mềm trung gian, đây là giao diện đơn giản giúp dễ dàng liên lạc giữa các máy chủ và ứng dụng web. Rack cho phép phần mềm trung gian, nhưng không phải là chính nó. –

+0

Đã giải quyết nhận xét của bạn. Cảm ơn. –

1

Phần mềm trung gian đường ray cho phép bạn nắm bắt yêu cầu hoặc phản hồi trước khi nó đến Rails và sửa đổi nó. (Bạn đang ở trong số giữa số giữa Giá và Đường ray). Ví dụ: bạn có thể nhận mọi phản hồi trả về loại mime kiểu "hình ảnh/png" và thêm hình mờ vào nó trước khi cho phép nó di chuyển lên Rack để phân phát. Hoặc bạn có thể lọc ra các yêu cầu mà bạn không thích vì lý do nào đó (không được phép, không có tiêu đề) và không bao giờ để cho chúng đánh trúng đường ray. Hoặc bạn có thể thêm tiêu đề vào yêu cầu đến trước khi chuyển nó lên đường ray. Hoặc bạn có thể nhận phản hồi đến từ đường ray và nếu đó là "văn bản/html", bạn có thể nén html (xóa khoảng trắng, v.v.) trước khi chuyển sang đầu ra. (Tôi đã thử nghiệm nó trong http://github.com/maxim/html_press)

Những ứng dụng nhỏ này rất nhiều và được cắm vào như "phần mềm trung gian".

1

Giải thích đến 4 tuổi:

Bạn có nhớ trò chơi: "Chinese whispers" mà bạn chơi như một đứa trẻ? (không có chủ nghĩa phân biệt chủng tộc - đó thực sự là những gì trò chơi được gọi trong ngày của tôi). Bạn muốn nói với bạn bè của bạn - người ngồi ở đầu kia của dòng, một thông điệp đặc biệt. nhưng bạn không thể nói trực tiếp với người đó: bạn phải truyền thông điệp của bạn từ người này sang người khác cho đến khi nó đến được người đó.

Nhưng thường xuyên hơn, bạn sẽ không thấy rằng những thay đổi đối với thông báo xảy ra khi nó đi qua chuỗi, cho đến khi nó đạt đến điểm kết thúc. Ví dụ:

  1. Originator: “Bạn sẽ luôn luôn nhớ điều này là ngày mà bạn gần như bắt thuyền trưởng Jack Sparrow.”
  2. Person 1 - đi vào: “Bạn sẽ luôn luôn nhớ những ngày mà bạn gần như bị bắt Thuyền trưởng Jack Sparrow. ”
  3. Người 2 - tiếp tục:“ Bạn sẽ luôn nhớ ngày mà bạn gần như bắt Thuyền trưởng Jack Sparrow. ”
  4. Người thứ ba - tiếp tục:“ Bạn sẽ nhớ ngày bạn bắt Thuyền trưởng Jack Sparrow. ”
  5. Pe rson 4 - tiếp tục: “Bạn sẽ nhớ Thuyền trưởng Jack Sparrow.”
  6. cuối cùng nhắn nhận:‘Hãy nhớ’

Middleware là về cơ bản là người ở giữa bạn, người khởi tạo thông điệp, và thông điệp cuối cùng mà đã nhận được: thông báo như thế nào họ có thể thay đổi hoặc lọc thông điệp? Đó là kinda những gì middleware là tất cả về trong một nutshell. Cấp các thần học là căng thẳng, nhưng hy vọng rằng sẽ cung cấp cho bạn một cơ sở mà trên đó để hiểu các câu trả lời kỹ thuật hơn ở trên.

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