2010-04-18 33 views
11

Tôi tự hỏi thư viện nào sẽ giảm bớt sự phát triển của dịch vụ đa nền tảng/daemon? (C/C++)Thư viện C++ nào dùng để viết một dịch vụ đa nền tảng/daemon?

Tôi đang nhắm mục tiêu: Windows, Linux và OS X. Yêu cầu: hoạt động mạng và truyền thông cổng nối tiếp.

Cũng sẽ rất tuyệt khi có một ứng dụng dịch vụ mẫu cơ bản.

+0

Tôi nhận ra câu hỏi này là thực sự, thực sự cũ nhưng gần đây tôi phát triển một mảnh có liên quan của phần mềm mà không trực tiếp trả lời các câu hỏi: https: // github.com/cubiclesoft/service-manager/ Nó không phải là một thư viện nhưng nó không đối phó với những khó khăn của việc viết các dịch vụ hệ thống đa nền tảng. Mã nguồn xảy ra được viết bằng C++ nhưng hầu như không liên quan. – CubicleSoft

Trả lời

5

Khi nói đến Qt bạn có thể thử qt-service.

+1

5 năm ra và đây vẫn là câu trả lời hàng đầu trong một tìm kiếm google. Liên kết được cập nhật: https://github.com/qtproject/qt-solutions/tree/master/qtservice –

+0

@ chadwick.boulay sửa lỗi liên kết sẽ thực sự là chỉnh sửa chứ không phải là nhận xét. –

6

Một daemon trong Linux thực sự chỉ là một quá trình chạy bị ngắt kết nối khỏi thiết bị đầu cuối. Trong Windows, một dịch vụ là một thứ có thể được điều khiển bằng cách sử dụng API quản lý dịch vụ, nhưng một lần nữa về cơ bản chỉ là một quá trình bị ngắt kết nối. Việc ngắt kết nối sang một bên, daemon & máy chủ không có nhiều điểm chung, từ nhiệm vụ này đến nhiệm vụ khác. Không có yêu cầu, ví dụ, rằng chúng được đa luồng, không đồng bộ hoặc thực hiện I/O mạng. Do đó, thật khó để xem một thư viện đa nền tảng sẽ làm gì.

+0

Các daemon Linux được dự kiến ​​sẽ được bắt đầu tự động bởi quá trình init (tức là init hoặc systemd), yêu cầu init script và một số thiết lập khác.Thông thường chúng cũng phản ứng phù hợp với SIGINT và thường đến SIGHUP hoặc các tín hiệu dễ bắt được khác. –

3

Boost có thể có hầu hết những gì bạn cần theo số threadingnetworking I/O.

Bạn cũng có thể tìm thấy Qt một giải pháp thay thế tốt. Nó cũng có các thư viện luồng và mạng và có một cách dễ dàng hơn để sử dụng & hiểu mô hình lập trình hướng sự kiện bằng cách sử dụng vòng lặp chạy. Hệ thống tín hiệu/khe của Qt rất dễ sử dụng và lý tưởng cho mạng/dịch vụ mạng (Boost cũng bao gồm hệ thống signal/slot nhưng khó sử dụng hơn và không bao gồm vòng lặp sự kiện; bạn phải cuộn bằng cách sử dụng thư viện sự kiện) . Là một thư viện đa nền tảng, Qt có thể xử lý nhiều vấn đề trong việc bắc cầu mô hình tinh thần của Unix (OS X và Linux) so với các quy trình, hệ thống tệp, v.v.

Để kiểm tra đơn vị, tôi đã rất hạnh phúc với thư viện kiểm tra đơn vị C++ của Google có tên là googletest (mặc dù cả Boost và Qt đều có hệ thống kiểm tra đơn vị tích hợp sẵn). Nó chạy trên tất cả các nền tảng bạn chỉ định. Tôi đã làm rất nhiều công việc với googletest trên các dự án Qt đa nền tảng và thấy nó khá thỏa đáng.

5

Bạn nên xem POCO. Tùy thuộc vào những gì bạn đang làm nó có thể có cơ sở để làm một số lượng lớn công việc cho bạn với công việc ít hơn rất nhiều so với Boost.

Yêu cầu bắt buộc đối với ACE mặc dù tôi không tự lo cho nó nhiều.

+0

ugh, tôi ghét ACE. Nếu bất cứ điều gì, tăng là tốt hơn nhiều. cả hai hút vì lý do khác nhau mặc dù. zeroMQ đáng để thử. Tôi chưa thử POCO, có vẻ thú vị. –

0

Tôi đã tìm thấy một thư viện lớn trong phiên bản ASIO không tăng cường. Bạn không cần tất cả thư viện tăng tốc nhưng chỉ có một thư viện tài liệu nhỏ và chỉ tiêu đề rất nhỏ này có số http://think-async.com/

Ví dụ, hệ thống máy khách-khách hàng ban ngày được thực hiện trong rất ít dòng mã. Hãy nhìn vào nó.

(nhớ để xem xét các phiên bản không tăng-ized)

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