gpt4 book ai didi

javascript - php/javascript 中的 SSL websocket

转载 作者:太空宇宙 更新时间:2023-11-03 14:06:37 24 4
gpt4 key购买 nike

我目前正在使用使用 TLS/SSL (wss://) 的 websocket 开发实时通知服务。
我对浏览器和服务器之间的握手有一些问题。在 php 中,服务器和客户端一切正常,但是当我使用 JS 的 websocket 连接到服务器时,它失败了,因为我不知道如何在服务器端(从浏览器)处理握手。

到目前为止,我的服务器代码是:

$host = '127.0.0.1';
$port = '9000';
$null = NULL;

$context = stream_context_create();

// local_cert must be in PEM format
stream_context_set_option($context, 'ssl', 'local_cert', "cert.pem");
stream_context_set_option($context, 'ssl', 'local_pk', "key.pem");
// Pass Phrase (password) of private key
stream_context_set_option($context, 'ssl', 'passphrase', "test");
stream_context_set_option($context, 'ssl', 'allow_self_signed', true);
stream_context_set_option($context, 'ssl', 'verify_peer', false);

// Create the server socket
$server = stream_socket_server('ssl://' . $host . ':' . $port, $errno, $errstr, STREAM_SERVER_BIND | STREAM_SERVER_LISTEN, $context);

if ($server == false) {
die ("Could no create the server.");
}

//start endless loop

while (true) {
$buffer = '';
print "waiting...";
$client = stream_socket_accept($server);
var_dump($client);
print "accepted " . stream_socket_get_name($client, true) . "\n";
if ($client) {
stream_set_blocking($client, true);
// TODO : handshaking
stream_set_blocking($client, false);

// Respond to php client (test only)
/*fwrite($client, "200 OK HTTP/1.1\r\n"
. "Connection: close\r\n"
. "Content-Type: text/html\r\n"
. "\r\n"
. "Hello World!");
fclose($client);*/
} else {
print "error.\n";
}
}

关于 RFC WebSocket 上的 SSL 握手没有任何说明。 .
如果有人对如何实现握手有一些想法,将不胜感激。

最佳答案

Nothing is stated about the SSL handshake on the RFC WebSocket.

wss:// 只是 SSL 连接中的 ws://,就像 HTTPS 只是 SSL 连接中的 HTTP 一样。没有什么特别的,即在成功的 SSL 握手后,您只需要在 SSL 流上使用 WebSocket 协议(protocol)。

关于javascript - php/javascript 中的 SSL websocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40247938/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com