Socket.io Web Socket Connection Handshake Ошибка - PullRequest
0 голосов
/ 21 марта 2019

Я создал свое первое чат-приложение на основе учебника, и оно отлично работает на моем локальном компьютере.Я развернул его на поддомене digitalocean , и хотя приложение работает ... Я получаю эту ошибку в консоли, и это сводит меня с ума, чтобы удалить:

index.js:83 WebSocket connection to 'wss://chat.webfacemedia.com/socket.io/?EIO=3&transport=websocket&sid=-Pa3Le2Vnn1MZnbGAAAj' failed: Error during WebSocket handshake: Unexpected response code: 400

Мой код сервера:

var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);
users=[];
connections =[];

server.listen(process.env.PORT || 3000,'localhost');
console.log('Server Running');
app.get('/',function(req, res){
   res.sendFile(__dirname + '/index.html');
});

io.sockets.on('connection', function(socket){
  connections.push(socket);
  console.log('Connected: %s sockets connected!',connections.length);

  //Disconnect
  socket.on('disconnect',function(data){
      users.splice(users.indexOf(socket.username),1);
      connections.splice(connections.indexOf(socket),1);
      updateUsernames();
      console.log('Disconnected: %s sockets 
       connected!',connections.length);
  });

  socket.on("send message",function(data){
      io.sockets.emit("new message", { msg: data , user: 
       socket.username});
  });

  socket.on("new user", function (data, callback){
      callback(true);
      socket.username = data;
      console.log(data);
      users.push(socket.username);
      updateUsernames();
  });

   function updateUsernames(){
      io.sockets.emit("get users",users);
   }
})

Код клиента:

$(function(){
    var socket = io.connect();
    $messageForm = $("#messageForm");
    $message = $("#message");
    $chat = $("#chat");
    $messageArea = $("#messageArea");
    $userFormArea = $("#userFormArea");
    $userForm = $("#userForm");
    $users = $("#users");
    $username = $("#username");

    $messageForm.submit(function(e){
        e.preventDefault();
        socket.emit('send message', $message.val());
        $message.val('');
    });
    socket.on('new message',function(data){
        $chat.append("<div class='card bg-light'><strong>"+data.user+"</strong>"+data.msg+"</div>");
    });

    $userForm.submit(function(e){
        e.preventDefault();
        socket.emit('new user', $username.val(),function(data){
            if(data){
                $userFormArea.hide();
                $messageArea.css('display','flex');
            }
        });
        $username.val('');
    });

    socket.on('get users', function(data){
        var html = '';
        for(var i = 0; i < data.length; i++){
            html += '<li class="list-group-item">'+data[i]+'</li>';
        }
        $users.html(html);
    });
})

Файл конфигурации Ubuntu

<virtualhost *:80>
    ServerName chat.webfacemedia.com
    ProxyPreserveHost on
    ProxyPass / http://localhost:3000
    ProxyPassReverse / http://localhost:3000
    RewriteEngine on
    RewriteCond %{SERVER_NAME} =chat.webfacemedia.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI}[END,NE,R=permanent]
    RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
    RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
    RewriteRule /socket.io/(.*) ws://localhost:3000/socket.io/$1 [P]
</virtualhost>

Я запускаю субдомен по https и во время чата я все еще получаюошибка в консоли.Посетите chat.webfacemedia.com и проверьте инспектора.Google для ответа только привел меня на форумы nginx, и я не использую nginx.Любая помощь?

...