PHP-将SSL添加到TCP套接字时出现意外行为
我开发了PHP WebSocket服务器,它使用HTTP协议进行握手。一切都很顺利。PHP-将SSL添加到TCP套接字时出现意外行为,php,sockets,ssl,tcp,websocket,Php,Sockets,Ssl,Tcp,Websocket,我开发了PHP WebSocket服务器,它使用HTTP协议进行握手。一切都很顺利。 当我想添加SSL层时,问题就出现了。当我启用它时,HTTP帧分为两部分-我需要调用读取函数两次来读取第二部分: HTTP头的第一个字母(G) 头的其余部分 没有SSL,一切正常。我尝试了很多修改,但没有结果。 有什么想法吗 读取函数列表: 我一直在使用stunnel,但仍然无法找到问题的解决方案。根本没有显示错误?是否启用了“显示错误”?是的,ini_集(“显示错误”,“打开”); protected func
当我想添加SSL层时,问题就出现了。当我启用它时,HTTP帧分为两部分-我需要调用读取函数两次来读取第二部分:
我一直在使用stunnel,但仍然无法找到问题的解决方案。根本没有显示错误?是否启用了“显示错误”?是的,ini_集(“显示错误”,“打开”);
protected function read($toRead = 1400) {
$return = "";
for (;;) {
if ($toRead < Config::$socket['chunk_size']) {
$length = $toRead;
} else {
$length = Config::$socket['chunk_size'];
}
$sData = fread($this->socket, $length);
if ($sData == false) return false;
$toRead = $toRead - $length;
$return .= $sData;
if ($toRead == 0) break;
}
var_dump($return);
return $return;
}
protected function createSSLContext() {
$context = stream_context_create();
if (Config::$ssl['switch']) {
stream_context_set_option($context, 'ssl', 'local_cert', Config::$ssl['filename']);
stream_context_set_option($context, 'ssl', 'allow_self_signed', true);
stream_context_set_option($context, 'ssl', 'verify_peer', false);
if (isset(Config::$ssl['passphrase'])) {
stream_context_set_option($context, 'ssl', 'passphrase', Config::$ssl['passphrase']);
}
}
$this->context = $context;
}