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等等。只要前端引入时和后端开放的端口一致即可。



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