Javascript Socket.io-Socket.io.js不可用
我需要使用python运行socket.io服务器。 我举了一个例子: 最终文件如下所示:Javascript Socket.io-Socket.io.js不可用,javascript,python,socket.io,Javascript,Python,Socket.io,我需要使用python运行socket.io服务器。 我举了一个例子: 最终文件如下所示: <!-- index.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=devi
<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
</head>
<body>
<button onClick="sendMsg()">Hit Me</button>
<!--WORKS:-->
<!--<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js"></script>-->
<!-- DOESNT WORK:-->
<script src="http://localhost:8080/socket.io/socket.io.js"></script>
<script>
const socket = io("http://localhost:8080");
function sendMsg() {
socket.emit("message", "HELLO WORLD");
}
socket.on("message", function(data) {
console.log(data);
});
</script>
</body>
</html>
所以这只是复制粘贴,因此效果很好,但我不想使用一些在线来源的脚本。因此,我试图修改脚本的src,方法是注释掉正在运行的版本,并用一个使用本地socket.io.js的版本替换它。
由于我没有在我的机器上找到脚本,我发现以下问题,这两个问题都不能帮助我解决问题:
无论我做什么,我的浏览器都会出现以下错误:
得到http://localhost:8080/node_modules/socket.io/socket.io.js net::ERR_中止404(未找到)
(索引):18未捕获引用错误:未定义io
at(索引):18
(匿名)(索引):18
根据我从两个链接线程中了解到的情况,当在服务器上调用listen时,我的服务器应该提供socket.io/socket.io.js。
不幸的是,我的情况并没有发生这种情况
我通过pip安装了socket.io,我还尝试了npm安装socket.io——另存为建议,这给了我一个新文件夹“node_modules”,但修改了脚本的src以:
<script src="http://localhost:8080/node_modules/socket.io/socket.io.js"></script>
这也没用
出于某种原因,使用cdnjs中的fie工作得很好(请参阅my index.html)
如果有人能帮我解决这个问题,我将非常高兴
干杯
Chris我从未与AIOHTTP合作过(一直与flask socketio合作),因此我使用文档进行了一些研究。事实证明,与许多http服务器一样,AIOHTTP不提供开箱即用的静态文件。
因此,您需要使用
add_static
方法()来处理它。(请注意,如果您想将此应用部署到生产环境中,最好使用Apache或Nginx等HTTP服务器)。
只需在您的routes声明下添加这一行
app.router.add_static('/static/',path='static/'))
现在,您需要在项目的根目录中创建一个static
文件夹,并将socket.io.js
文件放入其中。
确保版本2.2(与CDN版本相同)中的socket.io.js。您可以通过直接从正在使用的CDN URL或使用npm-i-s socket.io下载该文件来获取该文件-client@2.2
。然后,您可以在node\u modules/socket.io client/dist
中找到socket.io.js
文件
现在只需在HTML中使用
即可导入socket.io。我还使用通过xampp提供的apache Web服务器进行了测试。不幸的是,这没有产生任何影响。我测试了您的建议,至少现在我得到了不同的错误:未捕获的DomeException:未能从“XMLHttpRequest”读取“responseText”属性:仅当对象的“responseType”为“”或“text”(was“arraybuffer”)时,才可访问该值。在XMLHttpRequest.xhr.onreadystatechange()的Request.onLoad()和:DevTools未能加载SourceMap:无法加载的内容:HTTP错误:状态代码404,net::ERR_HTTP_RESPONSE_code_FAILUREI在试图找到问题的答案时遇到了相同的错误。你确定socket.io.js是socket.io-client上的2.2版吗?太棒了,很乐意帮忙!源映射文件不是必需的,只是有时对调试有用(更多)。如果要使此警告静音,您可以在静态文件夹中添加socket.io.js.map(您可以使用相同的CDN url下载它,并在末尾添加“.map”),或者编辑socket.io.js并删除最后一行#sourceMappingURL=socket.io.js.map
,但socket.io.js中的最后一行已经被注释掉了。我刚刚添加了socket.io.js.map,警告已经按照您的建议消失了。我现在要研究你提供的链接,总是喜欢附加信息。非常感谢你。
<script src="http://localhost:8080/node_modules/socket.io/socket.io.js"></script>