2009-01-03 49 views
10

Có cách nào trong Cocoa hiện được coi là thực tiễn tốt nhất để tạo ứng dụng máy chủ đa cấp hoặc ứng dụng khách không?Ứng dụng máy khách/máy chủ Cocoa

Tôi là một nhà phát triển web có kinh nghiệm và tôi thực sự yêu Python. Tôi mới đến Cocoa mặc dù. Ứng dụng tôi đang chơi đùa với văn bản là một hệ thống quản lý bệnh nhân cho một bệnh viện lớn. Hệ thống dự kiến ​​sẽ lưu trữ lượng dữ liệu khổng lồ theo thời gian nhưng dữ liệu được truyền trong một phiên duy nhất là rất nhẹ (hầu hết chỉ là văn bản). Giao tiếp được giả định xảy ra trên mạng cục bộ (có dây hoặc không dây). Dĩ nhiên nó phải rất an toàn.

Điều tốt nhất tôi có thể đưa ra là viết một dịch vụ web REST REST và kết nối với nó thông qua ứng dụng Cocoa. Có lẽ tôi thậm chí sẽ sử dụng Python để mã chính ứng dụng Cocoa.

Nhìn vào Cocoa, tôi thấy các công nghệ thực sự tuyệt vời trong Cocoa như CoreData nhưng tôi không thể tìm thấy bất kỳ điều gì tương tự để phát triển máy chủ khách hàng. Tôi chỉ muốn chắc chắn rằng tôi không thiếu gì cả.

Bạn nghĩ sao?

Ví dụ thế giới thực sẽ được đánh giá cao.

Xin cảm ơn trước.

Trả lời

5

Nếu bạn có quyền kiểm soát của cả khách hàng và máy chủ và bạn có thể giới hạn khách hàng chỉ với OS X, tôi trả lời câu hỏi thứ hai của Marc. Các đối tượng phân tán của Cocoa là một công nghệ tuyệt vời và làm cho các ứng dụng client-server kiểu RPC rất dễ dàng.

Nếu các yêu cầu trên là quá hạn chế cho bạn, bạn vẫn có nhiều lựa chọn có sẵn cho bạn trong thế giới Cocoa:

  1. Bạn có thể mã hóa toàn bộ ứng dụng client bằng Python sử dụng PyObjC. Với cách tiếp cận này, bạn có thể sử dụng mã mạng chuẩn mà bạn đã quen thuộc từ thư viện chuẩn của Python. Twisted cũng tích hợp độc đáo với vòng lặp chạy ca cao (ví dụ trong mã ví dụ PyObjC) và tôi đã có rất nhiều thành công khi sử dụng Twisted để liên lạc mạng từ trong ứng dụng Cocoa. Nếu bạn chọn để đi tuyến đường này, bạn có thể muốn mã ứng dụng khách trong Objective-C và tải mã python như một plugin (sử dụng NSBundle). Py2b27C của 01Ocó thể biên dịch các gói có thể tải từ mã python.

  2. Bạn có thể sử dụng NSURLConnection để truy cập cấp cao vào máy chủ dựa trên HTTP.

  3. Giảm mức trừu tượng, bạn có thể sử dụng NSStream của Cocoa để triển khai giao thức mạng của bạn. Tài liệu lớp là here, với các liên kết đến mã ví dụ minh họa các giao thức HTTP và SOAP.

  4. Bạn có thể giảm cấp độ thấp hơn và sử dụng các lớp CFNetwork. NSStream dựa trên CFNetwork, nhưng bạn có quyền kiểm soát mức thấp hơn trên dòng sử dụng CFNetwork.

Cuối cùng, công nghệ của Apple cho kiến ​​trúc máy chủ khách hàng là khung WebObjects.

2

Ca cao có Portable Distributed Objects, cho phép bạn tạo ứng dụng khách/máy chủ trong Objective-C và Cocoa thuần túy có thể giao tiếp qua các quy trình hoặc trên mạng.

Thật không may đó là một trong những điều khó khăn hơn để tìm hiểu trong Cocoa. Các đối tượng phân tán chưa được cập nhật để theo kịp các công nghệ mới như các ràng buộc, không có nhiều ví dụ hoặc tài liệu (và nhiều hướng dẫn cũ, thậm chí một số phiên bản OS X trước đây). Ngoài ra còn có rất nhiều "gotchas", ngay cả đối với các lập trình viên có kinh nghiệm Cocoa, trong cách thức các đối tượng được truyền qua dây hoặc là một bản sao hoặc một đối tượng proxy. Ví dụ, bạn có thể truyền một NSURL từ một máy chủ và nó sẽ có vẻ tốt nếu bạn chuyển đổi nó thành một chuỗi hoặc xem nó trong trình gỡ rối, nhưng máy khách của bạn sẽ sụp đổ nếu bạn cố gắng sử dụng nó trong một NSURLConnection.

Tùy thuộc vào trải nghiệm của bạn, việc sử dụng dịch vụ web có thể dễ dàng và nhanh hơn, nhưng bạn vẫn nên xem xét liệu bạn có muốn giữ toàn bộ dự án trong Cocoa hay không. Dưới đây là tutorial nếu bạn muốn xem ví dụ.

0

Tôi đã viết một máy chủ và một lớp ứng dụng khách để sử dụng trong Cocoa. Sử dụng các lớp này giúp dễ dàng tạo ra ứng dụng máy chủ hoặc ứng dụng khách mà không cần biết về ổ cắm và C-stuff Chỉ cần xem my website hoặc tại sourceforge.net project site.

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