2012-06-20 22 views
5

Tôi đang viết một máy khách SOAP đa luồng (Linux) đa luồng để giao tiếp với API Betfair. Ban đầu tôi đã cố gắng để nắm bắt với gSOAP nhưng tôi chỉ đơn giản là không thể làm cho nó hoạt động đúng cách bằng cách sử dụng nhiều tệp WSDL để tôi tạm thời bỏ qua điều đó. Tôi đã triển khai các lớp của riêng mình để lưu trữ dữ liệu và phân tích cú pháp/tạo XML bằng cách sử dụng RapidXML - điều duy nhất mà tôi đang tìm kiếm lời khuyên là sử dụng cho khía cạnh truyền tải HTTPS. Tôi đã thực hiện một số ứng dụng thử nghiệm ban đầu sử dụng OpenSSL và libcurl, những công việc này tốt nhưng tôi đã có một số vấn đề với các khía cạnh đa luồng và chúng nhiều C hơn C++, và thành thật mà nói tôi đang tìm kiếm một cái gì đó được cập nhật hơn một chút. Vì vậy, câu hỏi của tôi là điều này - Nếu tôi viết lại từ đầu, thì công cụ nào sẽ là công cụ tốt nhất để xử lý việc vận chuyển HTTPS. Tôi đã nghiên cứu những điều sau đây như khả năngViết ứng dụng khách C++ SOAP (đa luồng) - mà không cần gSOAP

  1. OpenSSL (thực hiện)
  2. libcurl (thực hiện)
  3. boost :: thư viện ASIO (không cố gắng vì tôi còn chưa chưa dabbled với Boost)
  4. Cố gắng làm tất cả bản thân mình bằng cách sử dụng lập trình socket (không quan tâm đến cách tiếp cận này)
  5. Chỉ cần thử và khó khăn trong việc gSOAP và lướt web cho các cách để làm cho nó hoạt động.
  6. Điều gì đó hoàn toàn khác mà tôi chưa gặp phải.

Vì vậy, về cơ bản, được đưa ra ở trên những gì ai đó sẽ tư vấn là cách tiếp cận tốt nhất để sử dụng về hiệu suất rắn và các vấn đề đa luồng tối thiểu? Hoặc có ai có bất kỳ kinh nghiệm với hiệu suất kém của bất kỳ ở trên và sẽ ngăn cản tôi sử dụng nó? Bất kỳ đề xuất và lời khuyên nào cũng sẽ được biết ơn.

Trả lời

3

Nếu bạn đang lo lắng về hiệu suất, trong kinh nghiệm của tôi tăng :: asio có xu hướng quy mô rất tốt đặc biệt là trong các dự án đa luồng lớn. Tuy nhiên, chú ý rằng boost: asio là một thư viện có mức socket khá thấp, vì vậy bạn sẽ phải đào sâu vào đó; có một số ví dụ hay về HTTPS với boost :: asio, ví dụ: this. Tôi sẽ từ chối ý tưởng socket do-it-yourself của bạn, bởi vì đó chỉ là những gì tăng :: asio cung cấp.

Cá nhân tôi chưa làm việc với libcurl, nhưng OpenSSL cung cấp API khá cao cấp nên bao gồm mọi thứ bạn cần; bạn sẽ mua thuận tiện ở mức giá hiệu suất mặc dù. Trong hầu hết các trường hợp, việc thiếu hiệu suất sẽ bị ảnh hưởng và do đó có thể bỏ qua, nhưng điều đó phụ thuộc vào đơn đăng ký của bạn.

gSOAP rất phù hợp với yêu cầu SOAP ở phía máy khách, nhưng thành thật mà nói, hỗ trợ phía máy chủ khá nhỏ và bạn sẽ phải thực hiện rất nhiều tinh chỉnh để hỗ trợ nhiều tệp WSDL trong ứng dụng đa luồng. Cá nhân tôi cũng sẽ bỏ phiếu chống lại việc đó.

Tóm lại, tôi sẽ sử dụng boost :: asio nếu bạn muốn tối đa hóa hiệu suất và cảm thấy thoải mái với ổ cắm và OpenSSL nếu thuận tiện và phát triển nhanh có ưu tiên cao hơn.

+0

Cảm ơn vì điều này.Tôi thích câu trả lời của bạn nhưng trước khi chấp nhận tôi sẽ đợi và xem tôi có nhận được thêm câu trả lời nào không. Tôi rất vui vì bạn cũng nghĩ rằng gSOAP đáng giá như tôi đã lãng phí theo nghĩa đen giờ cố gắng để cấu hình nó. – mathematician1975

2

Tôi đã viết ứng dụng khách của riêng mình bằng cách sử dụng thư viện Poco. Nó chứa mọi thứ bạn cần cho mục đích này.

  • Trình phân tích cú pháp XML (API DOM và SAX được hỗ trợ);
  • khách hàng HTTP và HTTPS.
+0

Nó có sẵn miễn phí hay bạn phải mua nó? – mathematician1975

+0

Có ba phiên bản của thư viện Poco. Phiên bản Cơ bản và Phiên bản Hoàn chỉnh được phát hành theo [Giấy phép Phần mềm Tăng cường] (http://pocoproject.org/license.html). –

+0

Tôi sử dụng Phiên bản hoàn chỉnh. –

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