我已经构建了一个非常基本的 EXE,它使用 Websocketpp 客户端,它只连接到 Websocket 服务器,并发送和接收消息。我用过VS 2013。
我注意到EXE的大小是巨大的。这就像 2.3 MB 的发布和 6 MB 的调试。
关于如何减小 EXE 大小的任何想法?
我已经构建了一个非常基本的 EXE,它使用 Websocketpp 客户端,它只连接到 Websocket 服务器,并发送和接收消息。我用过VS 2013。
我注意到EXE的大小是巨大的。这就像 2.3 MB 的发布和 6 MB 的调试。
关于如何减小 EXE 大小的任何想法?
WebSocket++ 作者在这里。你引用的尺寸似乎是正确的。请记住,像 echo_server(在 linux 上生成约 1MB 的可执行文件)这样的“非常基本的示例”比您根据程序源中的约 50 行所想象的要多得多。
开箱即用的任何基于 WebSocket++/Asio 的程序都是基于事件的高性能客户端/服务器系统,包括用于 DNS 解析、IPv4 和 IPv6、计时器、SHA1/MD5 散列、base64 编码、UTF8 验证、日志记录、线程安全和URI、HTTP 和多个 WebSocket 协议版本的解析器。仅仅因为您只使用这些功能来回显消息并不能使它成为一个微不足道的程序。
关于该主题的一些意见/注释:
由于模板的工作方式,WebSocket++、ASIO 和 STL 的代码被编译到您的程序中,而不是位于外部链接库中。这可能会使 WebSocket++ 或 Asio 程序看起来人为地大于链接到外部库的程序。
#1 中描述的情况有时会比外部库更有效,因为该程序将仅包含您的代码实际使用的库的部分,而不是所有部分。即,如果您不实例化客户端端点,则不会包含客户端代码。如果您的配置禁用 TLS 加密、日志记录或线程安全功能,它们也不会被包括在内。同样由于模板的工作方式,这可以双向进行。例如:一个同时包含客户端和服务器的程序可能会有一些不必要的重复。
WebSocket++ 代码的大小很大程度上与您使用的不同端点配置的数量以及在每个配置中启用的选项相关。无论您的程序做什么,它们都代表一个固定的大小。如果你的程序做的很少,它们将占代码的很大一部分。如果你的程序做了很多,那么这个比例就会缩小。
WebSocket++ 是相当模块化的(尽管现在没有很好的文档记录)。如果您真的关心代码大小(可能是小型嵌入式系统?)并且实际上并不需要 Asio 和 WebSocket++ 开箱即用的所有功能,您可以设置一个自定义配置来删除许多功能或将它们替换为您自己的空间优化实现。
Say you only ever need to service one non-TLS connection with no DNS lookup and no security timeouts in a guaranteed single threaded program with no logging. You can implement your own network transport policy based on your native OS socket library that doesn't include all the stuff that Asio does. You can also stub out the locking/concurrency and logger policies you don't need.