Blogger Information
Blog 81
fans 1
comment 0
visits 124561
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
socket PHP中的socket如何和websocket进行握手。
有什么是忘不了的的博客
Original
983 people have browsed it

当客户端通过websocket来访问服务端的时候,需要进行三次握手。那是怎么进行的呢?

说白了,就是,websocket来访问服务端的时候会发送一些消息,这些消息里有一个Sec-WebSocket-Key的数据。得到这个数据值,并进行编码一下返回给websocket就可以啦。这就握手成功了。是不是很简单。

PHP代码:

    //这里只贴握手的代码。 完整的代码去看我聊天室的代码。
    //先获取客户端连接过来的时候发送的数据
    $request = socket_read($sock,1024);
    //然后正则匹配,匹配到的数据放入$match,这里的$match是引用传值。
    //Sec-WebSocket-Key: 后面是有一个空格的。切记。。。
    preg_match('/Sec-WebSocket-Key: (.*)\r\n/',$request,$match);
    //这里进行编码先进行 sha1 加上一串字符长,这个字符串是固定的不可改变。记得设置true,这样得到的是20 字符长度的原始格式
    //在进行base64_encode 编码
    $accept = base64_encode(sha1($match[1].'258EAFA5-E914-47DA-95CA-C5AB0DC85B11',true));
    //这里就是拼接报文头信息了。
    $buffer  = "HTTP/1.1 101 Switching Protocols\r\n";
    $buffer .= "Connection: Upgrade \r\n";
    //在这里拼接我们编码后的数据
    $buffer .= "Sec-WebSocket-Accept: $accept\r\n";
    $buffer .= "Sec-WebSocket-Version: 13  \r\n";
    //一定要切记  最后一行需要两个换行符  \r\n\r\n
    $buffer .= "Upgrade: websocket \r\n\r\n";
    //吧这个字符串写入套接字,
    socket_write($sock , $buffer, strlen($buffer));

JS:

    var so = new WebSocket('ws://*.*.*.48:8888'); //这里是你请求的地址,ip+端口 记住协议是 ws开头的不是http
    console.log(so)
    so.onopen = function(){
        //这是链接成功后的回调函数。
        console.log('链接成功');
    }

这里看效果图

这是  客户端 websocket 发送给我们的数据。

WCZC(O}G]CJQVFGQG`[UC~J.png

我们拼接好返回个客户端数据后:我们写字回调函数的数据页打印出来了。

{]9C5IA2_H0$X2P)Q(_5(%C.png






Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post