2017-07-20 102 views
-1

我的問題很簡單我實際上遇到錯誤404試圖在我的網頁上導入socket.io。我正在使用nodejs socket.io GET http://domain/socket.io/?EIO = 3&transport = polling&t =導入socket.io時的LrTVonQ狀態404爲

<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script> 

要導入socket.io。

如果我從頭標記中刪除此行,我很好,但是當它在那裏時,我在開發工具中看到404錯誤,而且我的計數器甚至沒有工作。

我想爲我的網站之一做一個實時查看器計數,但我從來沒有真正使用Node.js,所以這就是爲什麼我有一些麻煩。如果我的腳本中有錯誤,請原諒我。

對於服務器端腳本,文件名爲:viewercounter.js這是代碼

var express = require('express'); 
var app = express(); 
var server = require('http').createServer(app); 
var io = require('socket.io')(server); 
var port = 8001; 

server.listen(port, function() { 
    console.log('Server listening at port %d', port); 
}); 

app.use(express.static(__dirname + '/public')); 

var count = 0 
io.on('connection', function(socket) { 
    count++; 
    socket.broadcast.emit('userupd', { 
     numUsers: count 
    }); 
    console.log(count); 

    socket.on('disconnect', function(){ 
     count--; 
     socket.broadcast.emit('userupd', { 
      numUsers: count 
     }); 
     console.log(count); 
    }); 
}); 

然後我直接在我的網頁上放置的,而不是做一個新的文件中客戶端腳本,我真的不看到它的重點。無論如何,該文件被稱爲:index.php 和代碼是在身體標記結束之前的文件的末尾,代碼前沒有其他js。

<script type="text/javascript"> 
$(function() { 
    var socket = io(); 

    socket.on('userupd', function (data) { 
    $('.counter').html(data); 
    }); 
}); 

編輯

通過尋找更深刻,我一直搞不明白,這是一個XMLHttpRequest的問題。事實上,當我剛剛導入的socket.io代碼試圖執行xhr.send(this.data)時,出現錯誤。任何人都知道我能如何解決這個問題 https://gyazo.com/53f64081a92b449e157df76c6c570178

EDIT2

在文件viewcounter.js更改端口後。它看起來像這樣:

// Setup basic express server 
var express = require('express'); 
var app = express(); 
var server = require('http').createServer(app); 
var io = require('socket.io')(server); 
var port = 80; 

server.listen(port, function() { 
    console.log('Server listening at port %d', port); 
}); 

// Routing 
app.use(express.static(__dirname + '/public')); 

var count = 0 
io.on('connection', function(socket) { 
    count++; 
    socket.broadcast.emit('userupd', { 
     numUsers: count 
    }); 
    console.log('New user: '); 

    socket.on('disconnect', function(){ 
     count--; 
     socket.broadcast.emit('userupd', { 
      numUsers: count 
     }); 
     console.log('Neg user:'); 
    }); 
    }); 
+0

那麼,URL https:// cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js'完全可以在這裏使用。所以,如果你在這個確切的網址上得到404,那麼在你看的時候或者是你的網絡問題,或者你誤解了給你一個404的東西。那個網址出現了對我工作很好。您需要'socket.io.js',因爲這是使socket.io在瀏覽器中工作的socket.io庫。 – jfriend00

+0

我仍然收到錯誤消息。因此,我認爲這是我的結局中的網絡問題。但是,這將是非常奇怪的,因爲我使用的是在OVH購買的vps ...換句話說,我確信它會在URL上收到404錯誤。 https://gyazo.com/7760940ba93dce354a06c28993c076fb – Willbill360

+0

你的404似乎在這個URL上,http://goldenvision.ml/socket.io/?EIO = 3&transport = polling&t = LrVsppJ'這是一個嘗試啓動socket.io從客戶端連接到服務器。這意味着服務器未正確偵聽該主機和端口上的socket.io連接。它肯定在我看來像你的404 URL試圖在端口80上建立socket.io連接,但是你的服務器正在監聽端口8080.當你在客戶端執行'var socket = io();'時,什麼是該代碼位於的客戶端網頁網址?瀏覽器欄顯示哪些頁面的活動URL? – jfriend00

回答

0

如果你的網頁是由Apache Web服務器來的80端口,你想的同一主機上創造的node.js一個socket.io服務器,那麼你需要爲該socket.io服務器選擇一個新端口,並且在連接到socket.io服務器時,需要確定要連接的端口,因爲默認端口爲80端口,但這不是您的socket.io服務器的位置是。

我建議使用端口8001像你最初爲你的socket.io服務器。請將你的node.js代碼改回。

然後,你可以在你的頁面從這個改變socket.io代碼:

<script type="text/javascript"> 
$(function() { 
    var socket = io(); 

    socket.on('userupd', function (data) { 
    $('.counter').html(data); 
    }); 
}); 
</script> 

這樣:

<script type="text/javascript"> 
$(function() { 
    var url = window.location.protocol + "//" + window.location.hostname + ":8001"; 
    var socket = io(url, {transports: ['websocket'], upgrade: false}); 

    socket.on('userupd', function (data) { 
    $('.counter').html(data); 
    }); 
}); 
</script> 

這將socket.io連接到相同的協議和主機你的網頁,但是一個不同的端口,它將只使用一個webSocket,所以你不會遇到socket.io通常嘗試用Ajax輪詢啓動連接的跨域問題。

如果你的插座。io服務器實際上位於與Apache服務器不同的主機上,那麼您需要將該主機放在URL中而不是window.location.hostname

+0

謝謝!它正在工作。那麼,我現在沒有得到錯誤,但它不更新計數器。爲此,我認爲我會在谷歌搜索,但它沒有得到錯誤,所以這是一個非常好的消息! *編輯*這是perfercly工作,但不是在頁面上的第一個連接,它實際上更新其他頁面上的號碼,但不是在最後一個連接的客戶端上。所以!十分感謝 !非常感謝你,你一直很樂於助人!和病人:) – Willbill360

相關問題