apache NodeJS脚本-无法连接到WebSocket

i34xakig  于 2023-03-13  发布在  Apache
关注(0)|答案(1)|浏览(122)

我正尝试在我的网页伺服器上建立一个WebSocket。我想从我的客户端连接到websocket,以更新网站上的资料。然而,当我尝试连接时,在Postman中出现以下错误:
错误:意外的服务器响应:101握手详细信息请求URL:https://example.com:8443/radar请求方法:GET状态代码:101交换协议请求报头Sec-WebSocket-版本:13连接:升级升级:WebSocket Sec-WebSocket-扩展:预消息-放气;客户端最大窗口位数主机:example.com:8443响应标头日期:2023年3月11日星期六02:20:55 GMT服务器:Apache/2升级:WebSocket X技术支持者:乘客5.3.7状态:101交换协议各不相同:用户代理内容长度:2
为了监听端口8443,我在VirtualHosts(httpd.conf)中有以下内容:

Listen 8443
<VirtualHost 123.123.123.123:8443>
    SSLEngine on
    SSLCertificateFile /usr/local/directadmin/data/users/admin/domains/example.com.cert.combined
    SSLCertificateKeyFile /usr/local/directadmin/data/users/admin/domains/example.com.key
    ServerName www.example.com
    ServerAlias www.example.com example.com
    ServerAdmin webmaster@example.com
    DocumentRoot /home/admin/domains/example.com/private_html
    UseCanonicalName OFF
    <IfModule !mod_ruid2.c>
        SuexecUserGroup admin admin
    </IfModule>
    CustomLog /var/log/httpd/domains/example.com.bytes bytes
    CustomLog /var/log/httpd/domains/example.com.log combined
    ErrorLog /var/log/httpd/domains/example.com.error.log

    # Allow WebSocket connections
    RewriteEngine On
    RewriteCond %{REQUEST_URI} ^/radar [NC]
    RewriteCond %{HTTP:Upgrade} =websocket [NC]
    RewriteCond %{HTTP:Connection} upgrade [NC]
    RewriteRule ^/radar/(.*)$ wss://localhost:8443/radar/$1 [P,L]

    <Directory /home/admin/domains/example.com/private_html>
        AllowOverride AuthConfig FileInfo Indexes Limit Options=Indexes,IncludesNOEXEC,MultiViews,SymLinksIfOwnerMatch,FollowSymLinks,None
        Options -ExecCGI -Includes +IncludesNOEXEC
        php_admin_flag engine ON
        php_admin_value sendmail_path '/usr/sbin/sendmail -t -i -f admin@example.com'
        php_admin_value mail.log /home/admin/.php/php-mail.log
        php_admin_value open_basedir /home/admin/:/tmp:/var/tmp:/opt/alt/php74/usr/share/pear/:/dev/urandom:/usr/local/lib/php/:/usr/local/php74/lib/php/
    </Directory>

    # Mail auto configuration (Thunderbird, MS Outlook)
    ProxyPassMatch "^/\.well-known/autoconfig/mail/config-v1\.1\.xml$|^/([Aa]utodiscover)/\1\.xml$" "unix:/usr/local/directadmin/shared/internal.sock|http://localhost"
</VirtualHost>

NodeJS脚本的代码如下所示:
radar.js:

const http = require('http');
const WebSocketServer = require('websocket').server;
const fs = require('fs')

function writeHtml(outputStream) {
    const inputStream = fs.createReadStream('index.html')

    inputStream.pipe(outputStream)

    outputStream.on('finish', () => {
        console.log('served')
        outputStream.end();
    })
    outputStream.on('error', (e) => {
        console.error('errors', e)
        outputStream.end();
    })
}

const server = http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  writeHtml(res)
})

server.listen(process.env.PORT || 8443);
const wsServer = new WebSocketServer({
    httpServer: server
});

wsServer.on('request', function(request) {
    console.log("ws received")
    const connection = request.accept(null, request.origin);
    connection.on('message', function(message) {
      console.log('Received Message:', message.utf8Data);
      connection.sendUTF('Hi this is WebSocket server!');
    });
    connection.on('close', function(reasonCode, description) {
        console.log('Client has disconnected.');
    });
});

index.html:

<!DOCTYPE html>
<html>
<head>
  <title>WebSocket Playground</title>
</head>
<body>
</body>
<script>
  
const ws = new WebSocket('wss://' + location.host);
ws.onopen = function() {
    console.log('WebSocket Client Connected');
    ws.send('Hi this is web client.');
};
ws.onmessage = function(e) {
  console.log("Received: '" + e.data + "'");
};
</script>
</html>

我也尝试过修改虚拟主机,但没有任何效果。
我将感谢任何帮助,我可以得到,我也没有使用代理(如云耀斑等)。谢谢。
编辑:尝试使用ws代替,通过端口8880在一个非ssl连接与虚拟主机配置。仍然是同样的问题。

bmvo0sr5

bmvo0sr51#

您只需在客户端的连接字符串中添加一个额外的“s

const ws = new WebSocket('wss://' + location.host);

用它替换

const ws = new WebSocket('ws://' + location.host);

相关问题