【问题标题】:Socket.IO failed: Error during WebSocket handshake: Unexpected response code: 400Socket.IO 失败:WebSocket 握手期间出错:意外响应代码:400
【发布时间】:2019-06-25 15:18:22
【问题描述】:

我在 A2Hosting 共享主机中托管了一个 socket.io 应用程序,问题是它只使用 xhr 轮询,因为建立套接字握手时似乎出错。

这是我收到的错误:

index.js:83 WebSocket connection to 'wss://www.xxxxxxx.com/socket.io/? 
EIO=3&transport=websocket&sid=7KqOx4VgE6xd507zAACf' failed: Error 
during WebSocket handshake: Unexpected response code: 400

app.js

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
const port = 65533

app.use(function(req, res, next) {
res.setHeader("Access-Control-Allow-Origin", 
"https://www.xxxxx.com/xxxx/xxxx");
res.setHeader("Access-Control-Allow-Credentials", true);
next();
});

server.listen(port, () => console.log(`Example app listening on port 
${port}!`));

app.get('/', (req, res) => res.send('Socket is running....'))

// io.set('transports', ['websocket']);

io.on('connection', function (socket) {
  socket.on('scan_complete', function (data) {
  io.emit("scan_result", data);
console.log(data);
});
});

.htaccess for app.js

RewriteEngine On
RewriteRule ^$ http://127.0.0.1:65533/ [P,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://127.0.0.1:65533/$1 [P,L]

客户端

$(function () {
        var socket = io.connect("https://www.xxxxx.com/");

        socket.on('scan_result', function (msg) {
            $('#content').html(profile);
        })

    })

【问题讨论】:

    标签: socket.io


    【解决方案1】:

    这对我有用:

        const io = require('socket.io')(server, {
          serveClient: false,
          // below are engine.IO options
          origins: '*:*',
          transports: ['polling'],  <== this is what solved my problem
          pingInterval: 10000,
          pingTimeout: 5000,
          cookie: false
        });
    
        io.on('connection', socket => {
          console.log('IO Connected!', socket.id);
    
          ...
    
          socket.on('disconnect', () => {
            console.log('User disconnected!', socket.id);
          });
        });
    

    【讨论】:

    • 这也为我解决了问题。谢谢@lumisi
    • 仅供参考,我相信这样做实际上是在完全禁用 Web 套接字并使用长轮询后备选项,这比实际的 Web 套接字更加健谈和慢得多。在恢复为仅使用轮询之前,可能应该解决根本问题。
    【解决方案2】:

    尝试在传输中添加websocket

    var socket = io(
                      'wss://www.xxxxx.com', 
                      { transports: ['websocket'] }
                   );
    
    
    socket.on('connect', function () {
      console.log('connected!');
      socket.emit('greet', { message: 'I am connected !' });
    });
    
    socket.on('scan_result', function (data) {
      console.log(data);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-05
      • 2015-12-26
      • 2017-06-04
      • 2015-07-22
      • 1970-01-01
      • 2020-10-29
      • 2019-11-25
      • 2016-04-08
      相关资源
      最近更新 更多