2016-04-07 37 views
1

我使用socket.io在我的网站上创建一个聊天室,当我在计算机上运行它时没有问题,但是当我在生产服务器上运行它时,socket.io.js输出以下内容错误:WebSocket握手响应400,但仍然有效

WebSocket connection to 'ws://myWebsite.com/socket.io/?EIO=3&transport=websocket&sid=1qtzy4QRde6G-PHkAAAU' failed: Error during WebSocket handshake: Unexpected response code: 400 

我使用[email protected]服务器和客户端

网站在端口8080听后面nginx与港口80,一切正常,除了错误消息罚款,但聊天室仍是功能性的,那是非常奇怪。

我已搜查堆栈溢出一些类似的问题,以及建议的解决方案已经是我nginx设置(/etc/nginx/sites-enabled/myWebsite.com):

server { 
     listen 80; 
     server_name myWebsite.com; 

     location/{ 
       proxy_pass http://127.0.0.1:8080; 
       proxy_http_version 1.1; 
       proxy_set_header Host $host; 
       proxy_set_header Upgrade $http_upgrade; 
       proxy_set_header Connection 'upgrade'; 
     } 
} 

Meteor WebSocket handshake error 400 with nginx Meteor WebSocket connection to 'ws://.../websocket' failed: Error during WebSocket handshake: Unexpected response code: 400

虽然聊天室仍然有效,我仍然想摆脱错误信息

供您参考,以下是socket.io相关代码:

// I use angular.js as the front-end framework 
function Socket (socketFactory, $rootScope) { 
    var ioSocket = io.connect(window.location.host); 
    var socket = socketFactory({ioSocket : ioSocket}); 
    return { 
     on: function (eventName, callback) { 
      socket.on(eventName, function() { 
       var args = arguments; 
       $rootScope.$apply(function() { 
        callback.apply(socket, args); 
       }); 
      }); 
     }, 
     emit: function (eventName, data, callback) { 
      socket.emit(eventName, data, function() { 
       var args = arguments; 
       $rootScope.$apply(function() { 
        if (callback) { 
         callback.apply(socket, args); 
        } 
       }); 
      }); 
     } 
    }; 
} 
Socket.$inject = ['socketFactory', '$rootScope']; 
angular.module('core').factory('Socket', Socket); 

Socket.on('new message', function (data) { ... }); 
+0

那么套接字如何连接?它是否发送第二个请求?它甚至升级到websockets还是备份到xhr? –

+0

我真的不知道这是如何工作的,我只打开了两个浏览器标签,他们都有400响应,但都可以接收来自对方的消息 – kitlee

回答

-1

刚刚意识到我的网站正在使用CloudFlare,问题就解决了,因为我禁用了代理。

相关问题