我正在尝试使用Boost库将一个使用C中的websockets的程序传递给WebAssembly,以便以后在Web应用程序中使用,或者在Wasmtime等运行时中使用它的缺陷。
一方面,我已经使用Emscripten编译了我的C应用程序,但我不能让它工作。我已经看到Emscripten有自己的与WebSockets相关的部分,但我的目的是能够利用我的C代码,该代码使用Boost库来实现WebSockets。
另一方面,我一直在阅读关于WASI的书,也许这可以解决我的问题。我一直在寻找,但我不知道目前是否有在C中引用websocekts实现的东西,因为我看到的是基于Rust示例的建议。
我不知道是否有人可以帮助我解决这个问题,并能够将我的C代码转换为WebAssembly,并且这在Web环境或运行时中是有效的。
我留下一个我正在测试的C代码的基本示例:
#include <iostream>
#include <string>
#include <boost/asio.hpp>
#include <boost/beast.hpp>
int main(int argc, char** argv) {
try {
std::string host = "127.0.0.1";
std::string port = "3333";
std::string message = "Hello World!";
boost::asio::io_context ioContext;
boost::asio::ip::tcp::resolver resolver{ioContext};
boost::beast::websocket::stream<boost::asio::ip::tcp::socket> webSocket{ioContext};
auto const results = resolver.resolve(host, port);
auto endPoint = boost::asio::connect(webSocket.next_layer(), results);
host += ':' + std::to_string(endPoint.port());
webSocket.set_option(boost::beast::websocket::stream_base::decorator(
[](boost::beast::websocket::request_type& req) {
req.set(boost::beast::http::field::user_agent,
std::string(BOOST_BEAST_VERSION_STRING) +
" websocket-client-coro");
}));
webSocket.handshake(host, "/");
webSocket.write(boost::asio::buffer(message));
boost::system::error_code errorCode;
webSocket.close(boost::beast::websocket::close_code::normal, errorCode);
}
catch(std::exception const& e) {
std::cerr << "There was an error: " << e.what() << std::endl;
return -1;
}
return 0;
}
谢谢
1条答案
按热度按时间ylamdve61#
要在WebAssembly中使用Boost库实现WebSockets,您需要执行以下步骤:
下面是一个基本的例子来说明这些步骤:
此外,您必须使用Emscripten编译代码以生成WebAssembly输出。