2012-07-19 20 views
16

tôi cần phải tạo ra một dịch vụ web đơn giản (là "máy chủ"). Mục tiêu là cung cấp một số dữ liệu tôi đọc trong ứng dụng Qt/C++ dưới dạng dữ liệu JSON. Về cơ bản, một ứng dụng JavaScript trong trình duyệt sẽ đọc dữ liệu của nó từ ứng dụng Qt. Nó thường là một kịch bản người dùng duy nhất, vì vậy người dùng chạy một ứng dụng Google Maps trong trình duyệt của mình, trong khi dữ liệu bổ sung đến từ ứng dụng Qt.Tạo WebService đơn giản trong C++/Qt (đóng vai trò là máy chủ) cung cấp dữ liệu JSON

Cho đến nay tôi đã tìm thấy những libs:

  1. Qxt: http://libqxt.bitbucket.org/doc/0.6/index.html nhưng là một newbie về C++/Qt tôi bỏ lỡ một số ví dụ. Nói thêm: Tôi đã tìm thấy một ví dụ here
  2. gSoap: http://www.cs.fsu.edu/~engelen/soap.html có nhiều ví dụ và tài liệu hướng dẫn và cũng dường như để hỗ trợ JSON
  3. KD SOAP: http://www.kdab.com/kdab-products/kd-soap/ không có ví dụ như xa như tôi có thể nói, docu là here
  4. tính năng Qt chính nó, nhưng nó là thêm về hoạt động như một máy khách: http://qt-project.org/videos/watch/qt-networking-web-services

Kiểm tra SO mang lại cho tôi cơ bản liên kết đến các libs trên

  1. webservice with Qt với một ví dụ tôi không thực sự nhận được.
  2. How to Create a webservice by Qt

Vì vậy, về cơ bản tôi làm có câu hỏi sau:

  1. nào lib bạn sẽ sử dụng? Tôi muốn giữ nó đơn giản nhất có thể và sẽ cần một ví dụ.
  2. Có cách nào khác (dễ dàng!) Để cung cấp dữ liệu JSON cho trang Web JavaScript bên cạnh WebService không?

- Chỉnh sửa, nhận xét: ---

cần phải được ứng dụng nội tại. Không thể cài đặt máy chủ web, không thể sử dụng thời gian chạy thêm. Người dùng chỉ cần chạy ứng dụng. Có lẽ Qt WebKit có thể là một cách tiếp cận ....

- Chỉnh sửa 2 -

Hiện nay việc kiểm tra các máy chủ web nhỏ như của SO "Qt HTTP Server?"

+1

Tại sao không tạo nó như một chương trình CGI được gọi bởi một máy chủ web hiện tại? Nó có lẽ đơn giản hơn nhiều. –

+0

Bởi vì nó về cơ bản là một kịch bản máy tính để bàn. Dữ liệu chỉ nằm trên máy tính của người dùng và không thể cài đặt máy chủ web trên máy tính của từng người dùng. WebApp chỉ được sử dụng bởi vì nó có tính năng Google Maps. –

+1

Bạn đã xem [Jetty] (http://jetty.codehaus.org/jetty/) chưa? IIRC không cần cài đặt và chỉ cần Java. –

Trả lời

14

Tính đến thử nghiệm của tôi, hiện tại tôi sử dụng QtWebApp: http://stefanfrings.de/qtwebapp/index-en.html Đây là một trong những câu trả lời của chỉnh sửa 2 (Qt HTTP Server?) WebServer nhỏ

Stefan có một số mã tài liệu tốt, được viết bằng "Qt C++" và dễ sử dụng, đặc biệt nếu bạn đã làm việc với servlets rồi. Vì nó có thể dễ dàng tích hợp trong dự án Qt của tôi, tôi sẽ kết thúc với một máy chủ Web nội bộ.

Một số mã demo từ các thử nghiệm JSON của tôi, cho thấy rằng việc tạo nội dung JSON về cơ bản là tạo ra một QString.

void WebServiceController::service(HttpRequest& request, HttpResponse& response) { 
// set some headers 
response.setHeader("Content-Type", "application/json; charset=ISO-8859-1"); 
response.setCookie(HttpCookie("wsTest","CreateDummyPerson",600)); 

QString dp = WebServiceController::getDummyPerson(); 
QByteArray ba = dp.toLocal8Bit(); 
const char *baChar = ba.data(); 
response.write(ba); 
} 

Nếu ai đó có ví dụ dễ dàng với các lib khác để chia sẻ, vui lòng cho tôi biết.

+1

Có sự tiến triển nào của dự án này không? –

+0

Cảm ơn bạn đã liên kết tới http://stefanfrings.de/qtwebapp/index-en.html. Tôi đã dành một thời gian để đọc tài liệu. Có vẻ tốt. Nên trên github – iep

2
QByteArray ba = dp.toLocal8Bit(); 
const char *baChar = ba.data(); 

Bạn không cần chuyển đổi QByteArray thành mảng char. Response.write() cũng có thể được gọi với QByteArray.

Nhân tiện: qPrintable(dp) là phím tắt để chuyển đổi từ QString thành mảng char.

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