node.js - Socket.io v4 基本实现
问题描述
我正在将应用程序从 V2 迁移到 V4,但我真的不认为这是这里的问题。我的问题是我的客户端和服务器之间建立了连接,尽管服务器似乎没有返回全局 io 对象。
服务器配置
var app = require('http').createServer((request, response) => {
response.writeHead(200);
response.end();
});
var io = require('socket.io')(app, {
path: '/my-app',
reconnectionAttempts: 10,
cors: {
origin: ["https://my-website.com"],
methods: ["GET", "POST"],
transports: ['websocket', 'polling'],
}
});
app.listen(3000, 'localhost', () => {
console.log('Listening on localhost:3000');
});
客户端配置
var socket = io('/', { path: "/my-app" });
在客户端,我将路径添加到我的应用程序:
<script src="/my-app/socket.io.js?EIO=4&transport=polling"></script>
不过,这里的文档真的不清楚。在不向应用程序 url 添加 EIO 和传输参数的情况下进行测试会从服务器返回错误代码(“传输:未知”)。
然后作为客户端,如果我在浏览器中加载我的页面,服务器会记录连接已建立的状态:
socket.io:server incoming connection with id jCxIvx9FU1_x_khdAAAB +3m
虽然在我的浏览器控制台中我收到以下错误:
Uncaught SyntaxError: Unexpected token '{' => socket.io.js?EIO=4&transport=polling:1
Uncaught ReferenceError: io is not defined => path/to/my/script.js
知道有什么问题吗?实际上,控制台中似乎也没有 io 对象。就像服务器没有将它传递给客户端一样。
解决方案
推荐阅读
- python - scipy.interpolate.interp2d 可以处理多少数据有限制吗?--> 大向量的错误结果
- angular - 模态确认对话服务 Jest、Jasmine 的角度测试
- android - ARCore Sceneform 在 2 点之间创建标尺
- javascript - 2个通过javascript函数链接的html页面
- azure - Azure AD:我需要更改公司范围的设置,但显然这是不可能的?
- terraform - 在 Azure 中启动 Terraform - 可以忽略 rg=x?
- java - 在 DialogFragment 中的 OnCreateDialog 方法之外设置 EditText
- ethereum - 我可以在以太坊主网上使用现有(已部署)合约而不是自己部署吗?(NFT)
- flutter - 为什么数据表列行甚至单元格中都没有样式属性
- javascript - SolidJSs createEffect 函数中的第三个参数是干什么用的?