2017-01-18 42 views
2

我建立了一个使用PHP和node.js的小聊天(使用socket.io库)如何让node.js与vagrant共享一起工作?

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

流浪必须与用户分享您的HTTP服务器的选项:https://www.vagrantup.com/docs/share/http.html

的HTTP服务器在端口80上运行和Node.js的在端口3000

在chat.php网页运行,我有这行代码:

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

当我执行的无业游民share命令,它提供了一个网址,你可以提供给其他人,他们将能够访问该网站。

所以考虑到URL,我编辑的代码上面提到的包括URL行:

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

,然后我开始SSH成无业游民,并从那里开始节点。

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

这是我在控制台中看到(铬)错误:

(网址是随机的,将更改每次运行漂泊不定的份额,但是我总是更新聊天页)

下面是在我的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?

要清楚,实际的网页服务完好。当我使用流浪者份额时,节点不可访问。

编辑:

我设法解决了一些问题。

我使用流浪股份--http 80在一个窗口和流浪股份 - 在另一个3000流氓。

然后我更改URL,使其连接到已在端口共享3000

因此,代码则看起来像这样的节点服务器: socket = io.connect("http://abc123.vagrantshare.com");

包括:3000(端口)的该网址停止了它的工作。 (不知道为什么,但我不认为这是问题)。

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

回答

0

因为

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

你只在本地监听和应用程序只能从你的虚拟机的工作原理

如果你(不,即使你尝试从主机访问它的工作)想要直接从端口3000共享应用程序,你应该可以运行流浪股份

vagrant share --http 3000 
+0

流浪股份的要点是与世界上任何人共享该网站。 192.168。*是您网络上的内部IP。 'socket = io.connect(“http:// site:3000”);'来自chat.php(我现在已经在帖子中编辑了它,使其更加清晰)。 192.168.33.10的作品是,但只有当你从主机访问它。我希望任何人都可以连接到它。这就是为什么我使用他们提供给流氓份额的URL。只是因为某些原因,端口3000不共享。 –

+0

你应该可以从'vagrant share --http 3000'开始' –

+0

只能共享节点服务器。所以,如果我这样做index.php不加载。 –