登录
首页 >  Golang >  Go问答

如何连接本地 MongoDB 实例与 Wasm 模块?

来源:stackoverflow

时间:2024-03-18 15:45:29 128浏览 收藏

在使用 WebAssembly 将数据存储在本地 MongoDB 实例时,连接失败可能是由于浏览器限制。WebAssembly 沙箱限制了网络访问,禁止从沙箱中打开低级网络套接字。因此,在浏览器上下文中运行的 WebAssembly 无法连接到本地服务器,即使服务器没有密码保护。

问题内容

我正在尝试使用编译为 webassembly 的 go 将一些数据存储在本地 mongodb 实例中。问题是,我什至无法连接到它。 mondog 实例不会以任何方式对来自 wasm 模块的连接做出反应。仅当从 wasm 模块连接时才会出现此问题。以普通方式编译的相同代码可以正常工作,并且来自 mongo shell 的连接也可以正常工作。运行的mongod实例没有密码保护。

如果重要的话,我的操作系统是 windows 10。

我尝试将 mongod bind_ip 参数从 localhost 更改为我的计算机的实际本地地址,并使用不同的浏览器(chrome 75.0.3770.80、opera 60.0.3255.109)。 更改超时持续时间也不起作用。

func connecttomongo(uri string, timeout time.duration) *mongo.client {

    ctx, cancel := context.withtimeout(context.background(), timeout)
    defer cancel()

    client, err := mongo.connect(ctx, options.client().applyuri(uri))

    if err != nil {
        log.fatal(err)
    }

    err = client.ping(ctx, readpref.primary())

    if err != nil {
        log.fatal(err) // it fails here
    }

    return client
}

func main() {
    client := connecttomongo("mongodb://localhost:27017", 20*time.second)
}


    
        
        
    

我运行 mongod.exe 时不带任何参数,因此它绑定到本地主机。

我希望我的代码能够连接到 mongod 实例,但实际上我在浏览器控制台中收到以下错误:“超出了上下文截止日期”。

我仍在学习 go,并且是 javascript 的新手,所以我可能会错过一些非常简单的东西。任何帮助将不胜感激。


解决方案


您正在尝试从 WebAssembly 连接到本地服务器,很可能使用浏览器 WASM 沙箱不允许的协议。

例如,WebAssembly 无法从 WASM 沙箱中打开低级网络套接字,在运行时,您在文件、系统和网络访问方面主要受到与 JavaScript 相同的限制浏览器中的 WASM。

值得一读的是 WebAssembly 在浏览器上下文中使用时在安全性和系统访问方面的限制,并且值得注意的是,阻止您连接的不是 WebAssembly,而是浏览器它正在运行 WebAssembly。

今天关于《如何连接本地 MongoDB 实例与 Wasm 模块?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>