在Google Chrome浏览器中,example.com/socket.io
给出404错误。
所以看来我的socket.io配置有错误。
我不知道他们是什么。
这是我的node.js服务器中最重要的部分:
Server.js
"use strict";
/** Imported modules */
const express = require("express");
const server = express();
var app = require("http").createServer(server);
const io = require("socket.io")(app);
const request = require("./modules/request.js");
const db = require("./modules/database.js")(bcrypt, sequelize);
const io_control = require("./modules/io_control.js")(io, db, sequelize);
/** Page Control Modules */
const PageConfig = require("./modules/page/PageConfig.js");
const CommonItems = require("./modules/page/CommonItems.js");
server.use(express.urlencoded({ extended: true }));
io.origins("*:*");
const Port = process.env.PORT || 3000;
app.listen(Port);
io.on("connection", function(socket) {
console.log(true);
});
io_control.js
module.exports = (io, db, sequelize) => {
var controller = new IOControl(io, db, sequelize);
io.on("connection", function(socket) {
console.log(true);
//and a lot of other code inside here.
});
};
在客户端:像这样:
第一个脚本
<script src="/socket.io" type="application/javascript"></script>
第二个脚本
const socket = io('//web.namei.nl',{path: '/socket.io'},{transports: ['websocket'], upgrade: false}).connect('', {query: `uuid=${getCookie('uuid')}&type=${getCookie('type')}` });
我尝试更改两个脚本,没有结果。
答案 0 :(得分:1)
由于socket.io客户端脚本源路径为src="/socket.io"
,因此您得到了404错误,因为该路径似乎无效,因此可能无法解析。
要么使用CDN,指向IO服务器上的位置,例如://web.namei.nl/socket.io/socket.io.js
,要么直接下载文件或使用捆绑程序将文件包括在客户端中。
在OP附加评论后更新
如果您无法连接到套接字服务器并且确定URL正确,则:
io.origins
。在服务器上:
const cors = require('cors');
...
const app = express();
app.use(cors());
const http = require('http').createServer(app);
const io = require('socket.io')(http);
io.on('connection', (socket) => {
...
});
const port = process.env.PORT || 3000;
http.listen(port, () => {
console.log(`listening on ${port}`);
});
客户:
// ensure the URL including port are correct below, also first connect without the additional query option
const socket = io('https://web.namei.nl', {
query: `uuid=${getCookie('uuid')}&type=${getCookie('type')}`
});
socket.on('connection', () => {
console.info('connected');
});