我试图在服务器上部署Node.js + Angular应用程序,但socket.io停止工作,我无法接收任何数据。本地工作正常,但一旦我改变URL,我就不能再使用socket.io了。
服务器端
const app = express();
// socket.io
const httpServer = createServer(app);
const io = new Server(httpServer, {
cors: {
origin: "http://SERVERURL",
},
});
io.on("connection", (socket) => {
socket.on("custom-event", (data) => {
io.emit("receive-message", data);
});
});
dotenv.config();
const PORT = process.env.PORT || 3000;
app.use(express.json());
app.use(cors());
app.use("/users", usersRoutes);
app.use("/auth", authRoutes);
app.get("/", (req, res) => {
res.send("Hello");
});
mongoose
.connect(process.env.CONNECTION_URL)
.then(() => {
})
.catch((error) => console.error(error));
httpServer.listen(PORT);
客户端
socket: Socket;
socketSub = new Subject();
constructor() {}
passServer(data: any) {
this.socket = io('SERVERURL', {
transports: ['websocket'],
});
this.socket.emit('custom-event', data);
}
receiveServer() {
this.socket = io('SERVERURL', {
transports: ['websocket'],
});
this.socket.on('receive-message', (data) => {
this.socketSub.next(data);
});
}
该错误在Firefox和Chrome中都出现。我没有任何特别的错误消息,只有:GET 400 BAD REQUEST - GET wss://URLSERVER/socket.io/?EIO=4&transport=websocket
和Firefox can't establish a connection to the server at wss://URLSERVER
我测试与客户端在本地主机和服务器端部署在一个真实的的服务器上。
1条答案
按热度按时间kuhbmx9i1#
如果你的服务器有一个自签名证书,浏览器不会显示对话框来接受证书,如果它只在WebSocket中使用。
首先访问请求的URL并接受证书警告,然后就可以创建安全的WebSocket了。
例如,如果你的WebSocket url是:
wss://urlserver
然后访问:
https://urlserver
并接受证书警告