Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Socket.io-Socket.io.js不可用_Javascript_Python_Socket.io - Fatal编程技术网

Javascript Socket.io-Socket.io.js不可用

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

我需要使用python运行socket.io服务器。 我举了一个例子:

最终文件如下所示:

<!-- 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>