acl-dev / acl

C/C++ server and network library, including coroutine,redis client,http/https/websocket,mqtt, mysql/postgresql/sqlite client with C/C++ for Linux, Android, iOS, MacOS, Windows, etc..
https://acl-dev.cn
GNU Lesser General Public License v3.0
2.85k stars 937 forks source link

能不能讲一下怎么使用websocket+ssl? #303

Closed dotkt closed 1 year ago

dotkt commented 1 year ago

多谢,顺便说一下,我非常喜欢你设计的c++11协程接口,很精简优雅。

zhengshuxin commented 1 year ago

首先,你可以参考示例:acl/app/wizard_demo/fiber_chat/http_servlet.cpp 中的类方法 doWebSocket() 了解如何使用 websocket,该方法继承于 acl::HttpServlet 类中的虚方法; 然后,你可以使用服务生成向导程序:acl/app/wizard 生成一个支持协程的 Http 服务器程序,然后打开 master_service.cpp 文件,可以在 master_service::proc_on_init() 看到加载 SSL 证书的过程,再在 master_service::setup_ssl() 中可以看到 SSL 握手过程,这样经过 SSL 握手后,acl::socket_stream 对象就是一个 SSL 连接对象了,再将该 SSL 连接对象传到 http_servlet 类对象中(在 master_service::on_accept 中),这样在 http_servlet::doWebSocket() 中,websocket 连接就已经支持 SSL 通信了。

dotkt commented 1 year ago

多谢大神