sách gpt4 ăn đã đi

google-app-engine - Làm cách nào để quản lý bối cảnh thời gian chạy App Engine Go để tránh bị khóa App Engine?

In lại Tác giả: IT Lão Cao Thời gian cập nhật: 28-10-2023 13:03:34 30 4
mua khóa gpt4 giày nike

Tôi đang viết một ứng dụng Go chạy trên thời gian chạy Go của App Engine.

Tôi nhận thấy rằng hầu hết mọi hoạt động sử dụng dịch vụ App Engine (chẳng hạn như Kho dữ liệu, Thư và thậm chí cả Khả năng) đều yêu cầu bạn chuyển nó appengine.Bối cảnh dụ, phải sử dụng hàm appengine.NewContext(req *http.Request) Bối cảnh.

Khi tôi viết ứng dụng này cho App Engine, tôi muốn có thể di chuyển nó dễ dàng và nhanh chóng sang các nền tảng khác nếu tôi muốn (những nền tảng có thể không hỗ trợ bất kỳ API App Engine nào).

Do đó, tôi đã loại bỏ sự tương tác thực tế với các dịch vụ và API của App Engine bằng cách viết các phần bao bọc nhỏ xung quanh mọi tương tác cụ thể của App-Engine, bao gồm cả các chức năng xử lý yêu cầu. Bằng cách sử dụng phương pháp này, nếu tôi muốn di chuyển sang một nền tảng khác, tôi chỉ cần viết lại các mô-đun cụ thể liên kết ứng dụng của tôi với App Engine. Đơn giản và rõ ràng.

vấn đề duy nhất là appengine.Bối cảnh sự vật. Tôi không thể chuyển nó từ trình xử lý yêu cầu của mình qua lớp logic tới mô-đun xử lý các API này mà không ràng buộc tất cả mã của tôi với App Engine. tôi có thể vượt qua http.Yêu cầu Đối tượng mà từ đó người ta có thể rút ra appengine.Bối cảnh Đối tượng, nhưng điều này đòi hỏi phải ghép một cái gì đó có lẽ không nên ghép. (Tôi nghĩ điều tốt nhất nên làm là không để ứng dụng nào của tôi biết đó là ứng dụng web, ngoại trừ những phần được thiết kế đặc biệt để xử lý các yêu cầu HTTP.)

Giải pháp đầu tiên bạn nghĩ đến là tạo một biến cố định trong một số mô-đun. Như thế này:

ngữ cảnh gói

nhập khẩu (
"ứng dụng"
)

var Bối cảnh appengine.Context

Sau đó, trong trình xử lý yêu cầu của tôi, tôi có thể sử dụng ngữ cảnh.Context = appengine.NewContext(r) Đặt biến đó và trong mô-đun sử dụng trực tiếp dịch vụ App Engine, tôi có thể truy cập ngữ cảnh thông qua ngữ cảnh.Bối cảnh. Không có mã can thiệp nào để biết appengine.Bối cảnh sự tồn tại của đối tượng. vấn đề duy nhất là "nhiều yêu cầu có thể được xử lý đồng thời bởi một thể hiện nhất định" , điều này có thể gây ra tình trạng cạnh tranh và hành vi không mong muốn với kế hoạch này. (Yêu cầu này đặt, yêu cầu khác đặt, yêu cầu đầu tiên truy cập và nhận sai appengine.Bối cảnh sự vật. )

Về mặt lý thuyết tôi có thể appengine.Bối cảnh tới kho dữ liệu, nhưng tôi phải chuyển một số mã định danh theo yêu cầu cụ thể xuống lớp logic tới mô-đun dành riêng cho dịch vụ để xác định appengine.Context trong kho dữ liệu Đối tượng là đối tượng của yêu cầu hiện tại, một lần nữa sẽ kết hợp những thứ mà tôi không nghĩ nên kết hợp. (Ngoài ra, nó còn làm tăng mức sử dụng bộ nhớ dữ liệu của ứng dụng của tôi.)

tôi cũng có thể appengine.Bối cảnh Đối tượng được chuyển tới toàn bộ chuỗi logic và thuộc loại giao diện{} và có bất kỳ mô-đun nào bạn không cầnappengine.Bối cảnh Đối tượng bỏ qua nó. Điều này tránh ràng buộc hầu hết ứng dụng của tôi với bất kỳnhận dạng. Tuy nhiên, điều này cũng có vẻ khó hiểu.

Vì vậy, tôi hơi bối rối về cách đảm bảo rõ ràng rằng những yêu cầu cần thiết appengine.Bối cảnh Nó có thể được lấy bằng mô-đun dành riêng cho App-Engine của đối tượng. Mong các bác cho em một giải pháp mà em chưa nghĩ ra.

Cảm ơn trước!

câu trả lời hay nhất

Điều này khó khăn vì bản thân bạn áp đặt quy tắc phạm vi (là quy tắc hợp lý) có nghĩa là không vượt qua Bối cảnh ví dụ và không có phiên bản nào giống Java Chủ đềLocalĐể đạt được mục đích tương tự một cách lén lút. Đó thực sự là một điều tốt, thực sự.

Bối cảnh Kết hợp hỗ trợ ghi nhật ký (đơn giản) với Gọi Tích hợp vào dịch vụ appengine (không dễ dàng). Tôi nghĩ có mười hàm appengine yêu cầu Bối cảnh. Tôi không thấy bất kỳ giải pháp sạch nào khác ngoài việc gói gọn tất cả những thứ này đằng sau vẻ ngoài của chính bạn.

Một điều có thể giúp bạn - bạn có thể bao gồm tệp cấu hình trong ứng dụng của mình sử dụng một số loại cờ để cho biết liệu nó có ở GAE hay không. Giá trị bool toàn cầu của bạn chỉ cần lưu trữ cờ này (KHÔNGbối cảnh chung). Khi quyết định sử dụng Bối cảnh mới(r) để có được Bối cảnh Các hàm mặt tiền của bạn có thể tham chiếu dịch vụ gắn cờ này khi truy cập các dịch vụ GAE hoặc sử dụng các cấu trúc tương tự để truy cập các thay thế của riêng bạn.

EDIT: Lưu ý cuối cùng, khi bạn giải quyết vấn đề này, tôi có thể mời bạn chia sẻ cách bạn đã thực hiện nó không, thậm chí có thể là một dự án nguồn mở? Tôi xấu hổ hỏi, nhưng nếu bạn không... ;-)

Giới thiệu về google-app-engine - Làm cách nào để quản lý bối cảnh thời gian chạy App Engine Go để tránh bị khóa App Engine? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/16826832/

30 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress