client端引入socket.io報404

網上給的所有的引入socket.io的方法(包括socket.io官網給的demo)都是<script src="/socket.io/socket.io.js"></script>,但是我在自己用express生成的項目中用同樣的方法引入失敗,

一直是404,該怎麼解決?

多方查詢無果,但有人提到以下情況:

"其實這個/socket.io/socket.io.js是socket.io服務器端以HTTP方式提供的靜態文件。而在服務器端,socket.io和Express綁定了同樣的端口。所以,在靜態頁面中,可以直接用這個方式來請求服務器上的文件。估計你的Express和socket.io沒有監聽同一個端口,所以會出現這個問題。

當然,另外的方法是,你直接以HTTP方式請求socket.io服務器所在端口上的文件,如http://localhost:SOCKET_IO_PORT/socket.io/socket.io.js。"

受此啓發,回看官網的demo,其中 有一條語句:server.listen(80);還有一個提示使用:<script src="http://your-io-server/socket.io/socket.io.js">

而之前在瀏覽器控制檯看到的一直是3000端口GET不到/socket.io/socket.io.js文件,所以,就嘗試將其改成

<script src="http://127.0.0.1:80/socket.io/socket.io.js">

奇蹟出現了。

總結:<script src="http://your-io-server/socket.io/socket.io.js">的your-io-server的端口要和server.listen(***)的端口一致才能GET到。

我的client.js內容如下:

<script src="http://localhost:80/socket.io/socket.io.js"></script>
<script>
    var socket = io.connect('http://localhost');
    socket.on('news', function (data) {
        console.log(data);
        socket.emit('my other event', { my: 'data' });
    });
</script>

補充:一般我們在部署web應用個時候,默認使用的80端口,所以我們可以將socket監聽的端口改成其他可供我們使用的端口,比如4000,5000等等。只要前端引入時和後端開放的端口一致即可。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章