我使用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
(网址是随机的,每次我运行流浪汉共享时都会更改,但我总是在聊天页面上更新它)
这是我的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。
答案 0 :(得分:0)
因为
socket = io.connect("http://localhost:3000");
您只在本地收听,而该应用仅适用于您的虚拟机(如果您尝试从主机访问它,它甚至无法运行)
如果您想直接从端口3000共享应用程序,您应该能够以
的形式运行vagrant sharevagrant share --http 3000