【发布时间】:2021-02-28 03:51:48
【问题描述】:
我正在使用 Socket.IO 使用以下代码在 NodeJS 中本地运行 WebSocket 服务器:
import express = require('express');
const path = require('path');
import http = require('http');
import { Socket } from 'socket.io';
const app = express();
const server = http.createServer(app);
const socketio = require('socket.io')(server);
app.get('/', (req, res) => {
res.send("Node Server is running");
});
server.listen(3000, function () {
console.log('Example app listening on port 3000!');
});
socketio.on("connection", (socket: Socket) => {
console.log(`connect ${socket.id}`);
console.log(`connect ${socket.handshake.url}`);
socket.on("disconnect", () => {
console.log(`disconnect ${socket.id}`);
});
});
使用Firecamp 之类的工具,我尝试在ws://localhost:3000 上建立连接,但无济于事。我最终使用 Socket.IO 客户端通过运行let socket = io() 从一个简单的网页进行连接。这似乎唯一的原因是因为该调用默认连接到为页面提供服务的主机,如here 所述。运行console.log(socket) 并查看输出,我最终发现engine 字段中的URL 是ws://localhost:3000/socket.io/?EIO=4&transport=websocket&sid=qerg3iHm3IKMOjdNAAAA。
我的问题是为什么 URL 如此复杂而不是简单的ws://localhost:3000?有没有更简单的方法来获取 URL 而不是通过开发工具访问它?
【问题讨论】:
-
我已经在这里解释了这个答案,stackoverflow.com/a/53893747/2837412
标签: node.js websocket socket.io