【发布时间】: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