【问题标题】:How do I make node.js work with vagrant share?如何使 node.js 与 vagrant share 一起使用?
【发布时间】:2017-06-03 06:49:57
【问题描述】:

我使用 PHP 和 node.js(使用 socket.io 库)构建了一个小型聊天室

基本上我使用 node.js 作为聊天服务器,使用 PHP 来处理实际网页。

Vagrant 可以选择与用户共享您的 HTTP 服务器:https://www.vagrantup.com/docs/share/http.html

HTTP 服务器运行在 80 端口,node.js 运行在 3000 端口。

在chat.php页面上,我有这行代码:

socket = io.connect("http://localhost:3000");

当我执行 vagrant share 命令时,它会提供一个 URL,您可以将其提供给其他人,他们将能够访问该站点。

因此,鉴于该 URL,我编辑上述代码行以包含该 URL:

socket = io.connect("http://ugly-elk-1232.vagrantshare.com:3000");

然后我启动 SSH 进入 vagrant 并从那里启动节点。

但是它不起作用。在聊天页面上,当 socket.io 尝试访问端口 3000 时,我可以看到超时错误。

这是我在控制台中遇到的错误(在 chrome 中):

GET http://ugly-elk-1232.vagrantshare.com:3000/socket.io/?EIO=3&transport=polling&t=Lcp9sZh net::ERR_CONNECTION_TIMED_OUT

(网址是随机的,每次我运行 vagrant share 时都会改变,但我总是在聊天页面上更新它)

这是我的 vagrantfile 中的内容:

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|

    config.vm.box = "scotch/box"
    config.vm.network "private_network", ip: "192.168.33.10"
    config.vm.hostname = "scotchbox"
    config.vm.synced_folder ".", "/var/www", :mount_options => ["dmode=777", "fmode=666"]
    config.vm.network "forwarded_port", guest: 3306, host: 3306

    # Optional NFS. Make sure to remove other synced_folder line too
    #config.vm.synced_folder ".", "/var/www", :nfs => { :mount_options => ["dmode=777","fmode=666"] }

end

有什么办法可以让这个工作,并允许共享端口 3000 而不仅仅是端口 80?

需要明确的是,实际网页的服务非常好。只是当我使用 vagrant share 时无法访问该节点。

编辑:

我设法在一定程度上解决了这个问题。

我在一个窗口中使用 vagrant share --http 80,在另一个窗口中使用 vagrant share --http 3000。

然后我更改 URL 以便它连接到在端口 3000 上共享的节点服务器。

所以代码如下所示: socket = io.connect("http://abc123.vagrantshare.com");

在 URL 中包含 :3000(端口)会阻止它工作。 (不知道为什么,但我认为这不是问题)。

现在的问题是 socket.io 现在求助于轮询并且不再使用 websockets。我试图强迫它使用 websockets,但它每次尝试都会给出 400 个错误请求。轮询不一定是坏事,而且它可以工作,但我希望它使用 websockets,因为我需要测试网站在实际启动时的行为方式,并且在这种情况下将使用 websockets。

【问题讨论】:

    标签: php node.js socket.io vagrant


    【解决方案1】:

    因为

    socket = io.connect("http://localhost:3000");
    

    您只在本地收听,并且该应用只能在您的虚拟机上运行(如果您尝试从主机访问它甚至无法运行)

    如果您想直接从端口 3000 共享应用程序,您应该能够运行 vagrant share as

    vagrant share --http 3000 
    

    【讨论】:

    • 流浪分享的意义在于与世界上的任何人分享网站。 192.168.* 是您网络上的内部 IP。 socket = io.connect("http://site:3000"); 行来自 chat.php(我现在在帖子中对其进行了编辑以使其更清晰)。 192.168.33.10 可以,但前提是您从主机访问它。我希望任何人都能够连接到它。这就是为什么我使用他们提供的 URL 和 vagrant share 来代替。只是3000端口由于某种原因没有共享。
    • 你应该可以从vagrant share --http 3000开始
    • 只共享节点服务器。所以如果我这样做,index.php 不会加载。
    • 你可以尝试在多个端口上共享vagrant share --http 3000 80 ...,但我认为你不能
    • 您可以使用网络服务器来管理它,您使用的是哪个网络服务器?使用虚拟主机或仅从 /nodejs 转发请求或类似的东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多