網上給的所有的引入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等等。只要前端引入時和後端開放的端口一致即可。