我找不到任何关于在PHP中设置wss连接的信息。我没有问题连接扔ws。顺便说一下,我正在使用这个非常棒的库来做到这一点:https://github.com/albeva/php-websocket
但是我的网站使用 https,我需要 WebSocket 安全连接以避免 Firefox 抱怨连接不安全的事实。
提前感谢您的帮助。
编辑
以下是库用于启动套接字连接的代码:
$master = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!is_resource($master)) {
$this->throwSocketError();
}
// set options
if (!socket_set_option($master, SOL_SOCKET, SO_REUSEADDR, 1)) {
$this->throwSocketError();
}
// bind
if (!socket_bind($master, $this->host, $this->port)) {
$this->throwSocketError();
}
// listen for connections
if (!socket_listen($master, SOMAXCONN)) {
$this->throwSocketError();
}
我相信我需要更改此代码,但我找不到方法。
你试过stream_socket_server吗?
<?php
$socket = stream_socket_server("ssl://0.0.0.0:".$port, $errno, $errstr);
if (!$socket) {
echo "$errstr ($errno)<br />n";
} else {
while ($conn = stream_socket_accept($socket)) {
fwrite($conn, 'some data...n');
fclose($conn);
}
fclose($socket);
}
?>
这是一个示例(和链接),它略有修改,并从另一个 SO 帖子中找到。链接到其他帖子
这是指向stream_context_create php 函数定义的链接。函数定义
try
{
$localCertificateFilespec = $connection['localCertificateFilespec'];
$localCertificatePassphrase = $connection['localCertificatePassphrase'];
$sslOptions = array(
'ssl' => array(
'local_cert' => $localCertificateFilespec,
'passphrase' => $localCertificatePassphrase,
'allow_self_signed' => true,
'verify_peer' => false
)
);
$sslContext = stream_context_create($sslOptions);
$clientArguments = array(
'stream_context' => $sslContext,
'local_cert' => $localCertificateFilespec,
'passphrase' => $localCertificatePassphrase,
'trace' => true,
'exceptions' => true,
'encoding' => 'UTF-8',
'soap_version' => SOAP_1_1
);
$oClient = new WSSoapClient($connection['wsdlFilespec'], $clientArguments);
$oClient->__setUsernameToken($connection['username'], $connection['password']);
return $oClient->__soapCall($operation, $request);
}
但是,在链接的SO帖子的最底部,您会从"Sam"中找到答案。 在接下来的几周里,我需要做同样的事情,所以我计划使用 Sams 方法......因为我更像是 PHP 中 CURL 的粉丝。
你目前在PHP上最好的选择是使用Ratchet。设置wss连接的最佳方法是将websocket服务器放在Nginx或HAProxy后面,这将为您处理所有SSL内容。这在HAProxy中得到了解释。请注意,你可以对Nginx做同样的事情,因为它现在也支持WebSocket。