Nodejs“WebSocket在建立连接之前关闭”socket.io espress

时间:2017-08-27 22:48:06

标签: javascript node.js express socket.io

我有这个问题,我从未遇到过,而且我找到的所有其他帖子都没有帮助我。

事实上,我在受SSL保护的网站上使用带有Express和Socket.io的NodeJS,但我收到此错误:“WebSocket连接到'wss://site.domain:8001 / socket.io /?EIO = 3& transport = websocket'失败:WebSocket在建立连接之前关闭。“

所以我在互联网上搜索,我找到了很多有趣的东西,甚至是那些与我有完全相同问题的人,但是没有人回答它们,有时它只是没有用。

我有两个文件,比如normaly,我有一个名为“server.js”的服务器文件和一个名为“agent.php”的客户端文件。

server.js

var fs = require('fs');
var https = require('https');

var mysql = require('mysql');
var express = require('express');
var app = express();

var options = {
  key: fs.readFileSync('/var/www/html/site.domain/public_html/cert/domain.key'),
  cert: fs.readFileSync('/var/www/html/site.domain/public_html/cert/domain.pem')
};
var serverPort = 8001;

var server = https.createServer(options, app);
var io = require('socket.io')(server);

app.get('/', function(req, res) {
  res.sendFile(__dirname + '/public/index.html');
});


var con = mysql.createConnection({
  host: "127.0.0.1",
  user: "user",
  password: "password",
  database: "dbname"
});

con.connect(function(err) {
  if (err) throw err;
  console.log("Connected to mysql!");
});

io.on('connection', function(socket) {
  console.log('new connection');
});

server.listen(serverPort, function() {
  console.log('server up and running at %s port', serverPort);
});

这个结果是通过在控制台“服务器启动并在8001端口运行”按预期编写的。但是,由于我认为错误,在您加载页面时不会打印“新连接”。

agent.php

<!DOCTYPE HTML>
<html>
  <head>
    <title>TERMINAL - AGENT</title>
    <link rel="stylesheet" type="text/css" href="/assets/css/agent.css?version=<?php $v=rand(100,9999999999); echo $v;?>">
    <link rel="stylesheet" type="text/css" href="/assets/css/main.css?version=<?php $v=rand(100,9999999999); echo $v;?>">
    <link rel="shortcut icon" href="/images/favicon.ico" type="image/x-icon">
    <link rel="icon" href="/images/favicon.ico" type="image/x-icon">
    <META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
    <link href="https://fonts.googleapis.com/css?family=Cairo|Pontano+Sans:400,600|Rajdhani:400,600|Teko:400,600|Titillium+Web:400,600|Exo:400,600|Open+Sans+Condensed:400,600|sans-serif|Anton:400,600|VT323|Grand+Hotel|Anonymous+Pro:400,400i,700,700i" rel="stylesheet">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script>
  </head>
  <body>

    *A lot of html stuff which is not important at all*

    <script type="text/javascript">
      <?= 'var mat = '.htmlspecialchars($_GET['mat']).';' ?>
      $( document ).ready(function (){
        var url = window.location.protocol + "//" + window.location.hostname + ":8001";
        var socket = io(url, {transports: ['websocket'], upgrade: false});

      });
    </script>
  </body>
</html>

这个错误的结果。我真的不知道该做什么,我已经掌握了所有的知识,而且我也经常搜索。

1 个答案:

答案 0 :(得分:0)

好的,我发现了我的问题!我使用cloudflare使网站更安全并处理https。所以我用CloudFlare禁用了所有的东西,现在它正在工作......但只是在非安全的情况下。我在apache中设置了SSL的东西,它在非nodejs页面中工作正常,但是对于nodejs它没有工作。所以一个问题解决了!我希望它能帮助每个可能遇到与我同样问题的人!