2012-03-03 36 views
5

Tôi có cài đặt socket riêng của mình hỗ trợ kết nối từ máy khách tcp thông thường. Bây giờ tôi muốn thêm hỗ trợ websocket vào chương trình máy chủ của tôi. Trong trường hợp đó, tôi sẽ cần hỗ trợ bắt tay và các giao thức khung tin nhắn được hỗ trợ bởi các trình duyệt web chính. Tôi đã có thể xử lý phần bắt tay, nhưng đã bị mắc kẹt trong việc xử lý khung và không rập khuôn các thông điệp. Có thư viện C hoặc C++ hiện có nào xử lý mã hóa và giải mã khung tin nhắn websocket và hỗ trợ các giao thức websocket chính được các trình duyệt web chính sử dụng không?Thư viện C hoặc C++ để mã hóa và giải mã khung websocket

Hầu hết việc triển khai hiện tại mà tôi tìm thấy (ví dụ: libwebsocket, websocketpp, v.v.) triển khai thư viện máy chủ và máy khách của riêng họ, điều đó có nghĩa là tôi cần sử dụng triển khai socket của mình. Tôi không muốn làm điều đó bởi vì điều này sẽ yêu cầu tôi sửa đổi rất nhiều thứ trong chương trình hiện tại của tôi, và nó không phải là một lựa chọn cho tôi. Những gì tôi cần chỉ là một thư viện đơn giản để xử lý việc mã hóa và giải mã khung websocket (và/hoặc cũng xử lý phần bắt tay, nhưng nó không bắt buộc).

+1

cách chuyển từ [phpws] (http://code.google.com/p/phpws/source/browse/phpws/websocket.framing.php)? mã trông khá đơn giản. – Chikei

Trả lời

5

Thư viện websocketpp được thiết kế đẹp và các lớp xử lý khung không được trộn lẫn với các ổ cắm. Có sự phụ thuộc vào các thư viện BOOST và STL. STL không phải là một vấn đề và sự phụ thuộc BOOST là khá dễ dàng để tránh. Chỉ cần bắt đầu từ tệp websocket_frame.hpp của nhánh chính sách-refactor.

6

Tác giả thư viện Websocketpp tại đây.

Mã xử lý khung và mã xử lý bắt tay hoàn toàn tách biệt với mã socket/mạng. Nhìn vào thư mục bộ xử lý của nhánh chính sách-refactor. Có một cho dự thảo 76 (hybi_legacy) và một cho RFC6455 (hybi/hybi_header). Bộ xử lý khung đọc từ luồng STL mà bạn có thể điền thông qua mã mạng của riêng bạn hoặc từ một số nguồn khác.

Gửi cho tôi một PM về github nếu bạn có bất kỳ câu hỏi cụ thể nào khác.

+5

Hãy hỏi thêm bất kỳ câu hỏi nào ở đây, bằng cách sử dụng nhận xét, thay vào đó, những người khác cũng có thể học hỏi từ đó. –