首先,如果您能告诉我这里是否有问题:
客户:
var ws = new WebSocket('ws://localhost:9090/websocket_server.php');// ws://echo.websocket.org/echo
console.log(ws);
ws.onopen = function(e) {
console.log("Connection open...", e);
ws.send("Hello WebSocket!");
};
ws.onmessage = function(e) {
if(typeof e.data === "string"){
console.log("String message received", e, e.data);
} else {
console.log("Other message received", e, e.data);
}
};
ws.onerror = function(e) {
console.log("WebSocket Error: " , e);
};
ws.onclose = function(e) {
console.log("Connection closed", e);
};
服务器:
<?php
defined('KEY_SUFFIX') ? null : define('KEY_SUFFIX', "258EAFA5-E914-47DA-95CA-C5AB0DC85B11");
error_reporting(E_ALL);
set_time_limit(0);
ob_implicit_flush();
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($sock, 'localhost', 9090);
socket_listen($sock);
while (true) {
$client = socket_accept($sock) or die('socket_accept returned false');;
//$buf = socket_read($client, 1024);
$buf = null;$key=null;
while ( $line = socket_read($client, 2048, PHP_NORMAL_READ) ) {
$buf .= $line;
if ( strpos($line, 'Sec-WebSocket-Key')!== false ) {
$key = substr($line, 19);
} else
if ( strpos($line, 'User-Agent')!== false ) {
break;
}
}
//echo $buf;
$sha1 = SHA1($key.KEY_SUFFIX, true);
$accept = base64_encode($sha1);
$write = "HTTP/1.1 101 Switching Protocols\n";
$write .= "Upgrade: websocket\n";
$write .= "connection: Upgrade\n";
$write .= "Sec-Websocket-Accept: $accept\n";
//$write .= "Sec-Websocket-Extensions: extension\n";
socket_write( $client, $write, strlen($write) );
}
socket_close($sock);
?>
我以这种方式运行 php 脚本:
F:\xampp\php\php -q D:\websocket_server.php
问题:
假设一切都正确,我一直在查看 chrome 调试器网络部分并且它处于挂起状态,我希望在此过程之后我应该在 js 控制台中看到一个 onopen 事件,
这是怎么回事?我期待错了吗?
在此过程之后,服务器和客户端之间的连接应该从 0 状态变为 1 状态还是需要更多工作才能建立打开状态?