#webassembly
#веб-сборка
Вопрос:
У меня есть драйвер базы данных, написанный на Go (с использованием go-mssqldb), который отлично работает сам по себе, и я скомпилировал его в WebAssembly. Когда я запускаю файл wasm, он успешно подключается и немедленно запрашивает что-то базовое, например, "SELECT @@version"
этот клиент возвращает ошибку Protocol not available
. Возможно ли отправлять сетевые запросы из WebAssembly? Существуют ли особые соображения при этом? Означает ли эта ошибка, что невозможно использовать драйвер таким образом? Что приводит к этой ошибке (откуда она берется … из операционной системы или браузера?) и где это задокументировано (особенно, как я могу лучше понять ошибку в этом конкретном случае и в более общем плане при использовании WebAssembly)? Спасибо.
Ответ №1:
Нет, вы не можете.
Для лучшего понимания WASM вам следует принять одну вещь: WebAssembly в веб-браузере выполняется на JavaScript. Конечно, вы запускаете программу Go, однако WASM запускается в движке JS веб-браузера. Это означает, что в WASM вы не можете делать то, чего не может JS. Ваши библиотеки Go реализованы только с использованием JS API. Вы никогда не сможете напрямую обращаться к низкоуровневым API ОС.
Это означает, что вы не можете подключить SQL Server напрямую, потому что JS не может использовать низкоуровневую сеть сокетов, отличную от WebSockets. На стороне сервера ваш SQL server должен принимать WebSocket, чтобы заставить его работать. Один из способов добиться этого — использовать Websockify. На стороне клиентов у меня нет никакого опыта в программировании Go, но вы должны быть в состоянии получить документацию, касающуюся взаимодействия с сокетами и WebSockets в WemAssembly.