第一次在socket.io上工作并尝试启动它,我可以提出请求,并且我已经启动了服务器,这是节点中的服务器。
const app = require('express')();
const http = require('http').createServer(app);
const io = require('socket.io')(http);
app.get("/",function (req,res){
res.send("Hello you socket loving bastard!");
});
io.on('connection', socket => {
console.log('user connection', socket);
io.emit('You got someone!', {user: "me"});
});
io.on('close', socket => {
console.log(socket);
});
http.listen(9090, () => {
console.log("Node starting on 9090 for websockets!")
});
使用vue原生websocket我有这个。。。
Vue.use(Socket, 'ws://localhost:9090/', {
reconnection: true,
reconnectionAttempts: 5,
reconnectionDelay: 1500
});
浏览器中的控制台显示:build.js?b408:1 WebSocket connection to 'ws://localhost:9090/' failed: Connection closed before receiving a handshake response
服务器在控制台中什么也不说,但是,它将提供get
请求
嗯。。。问题是,我使用的是vue-native-websocket
Socket.io不是本地的websocket处理程序,它添加了明显缺乏的额外标头信息。我切换到只在节点中使用ws
,它工作得很好。
来自Socket.io文档。
Socket.IO不是WebSocket实现。虽然Socket.IO确实在可能的情况下使用WebSocket作为传输,但它会向每个数据包添加一些元数据:数据包类型、命名空间和需要消息确认时的数据包id这就是为什么WebSocket客户端将无法成功连接到Socket.IO服务器,Socket.IO客户端也将无法连接到WebSocket服务器