我有这个问题,我从未遇到过,而且我找到的所有其他帖子都没有帮助我。
事实上,我在受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>
这个错误的结果。我真的不知道该做什么,我已经掌握了所有的知识,而且我也经常搜索。
答案 0 :(得分:0)
好的,我发现了我的问题!我使用cloudflare使网站更安全并处理https。所以我用CloudFlare禁用了所有的东西,现在它正在工作......但只是在非安全的情况下。我在apache中设置了SSL的东西,它在非nodejs页面中工作正常,但是对于nodejs它没有工作。所以一个问题解决了!我希望它能帮助每个可能遇到与我同样问题的人!