Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>Websocket test</title>
- </head>
- <body>
- <form action="">
- <div style="border: 1px solid grey; padding: 10px;">No result</div>
- </form>
- <script>
- let socket = new WebSocket('ws://websocket.loc:8080/server.php');
- socket.onopen = function() {
- console.log('Connected');
- };
- socket.onerror = function(error) {
- console.log('Error: "'+error.message+'"');
- };
- socket.onclose = function() {
- console.log('Closed');
- };
- socket.onmessage = function(event) {
- let data = JSON.parse(event.data);
- console.log('Type: '+data.type+'; message: '+data.message);
- };
- </script>
- </body>
- </html>
- <?php
- function sendHeaders($headersText, $newSocket, $host, $port) {
- $headers = [];
- $tmpLine = preg_split("/rn/", $headersText);
- foreach ($tmpLine as $line) {
- $line = rtrim($line);
- if (preg_match("/A(S+): (.*)z/", $line, $matches)) {
- $headers[$matches[1]] = $matches[2];
- }
- }
- $key = $headers['Sec-WebSocket-Key'];
- $sKey = base64_encode(pack('H*', sha1($key.'258EAFA5-E914-47DA-95CA-C5AB0DC85B11')));
- $strHeadr = "
- HTTP/1.1 101 Switching Protocols rn
- Upgrade: websocketrn
- Connection: Upgradern
- WebSocket-Origin: $hostrn
- WebSocket-Location: ws://$host:$port/server.phprn
- Sec-WebSocket-Accept:$sKeyrnrn
- ";
- socket_write($newSocket, $strHeadr, strlen($strHeadr));
- }
- define('PORT', '8080');
- $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
- socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
- socket_bind($socket, 0, PORT);
- socket_listen($socket);
- while (true) {
- $newSocket = socket_accept($socket);
- $header = socket_read($newSocket, 1024);
- sendHeaders($header, $newSocket, $_SERVER['HTTP_HOST'], PORT);
- }
- socket_close($socket);
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement