2017-01-18 64 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不加載。 –