Websocket协议之php实现
前面学习了HTML5中websocket的握手 协议 、打开和关闭连接等基础内容,最近用php 实现 了与浏览器websocket的双向通信。在学习概念的时候觉得看懂了的内容,真正在实践过程中还是会遇到各种问题,网上也有一些关于php的websocket的 实现 ,但是只有自己亲手
前面学习了HTML5中websocket的握手协议、打开和关闭连接等基础内容,最近用php实现了与浏览器websocket的双向通信。在学习概念的时候觉得看懂了的内容,真正在实践过程中还是会遇到各种问题,网上也有一些关于php的websocket的实现,但是只有自己亲手写过之后才知道其中的感受。其中,google有一个开源的phpwebsocket类(https://code.google.com/p/phpwebsocket/),但是从其握手过程中可以明显看出,这还是最初的websocket协议,请求头中使用了两个KEY,并非version 13(现行版本)。下面是本人实践过程,同时封装好了一个现行版本的php实现的实用的websocket类。
一、握手
1、客户端发送请求
websocket协议提供给javascript的API就是特别简洁易用。
View Code
先看效果,客户端和服务器端握手的结果如下:
2、服务器端
封装的类为WebSocket,address和port为类的属性。
(1)建立socket并监听
1 function createSocket() 2 { 3 $this->master=socket_create(AF_INET, SOCK_STREAM, SOL_TCP) 4 or die("socket_create() failed:".socket_strerror(socket_last_error())); 5 6 socket_set_option($this->master, SOL_SOCKET, SO_REUSEADDR, 1) 7 or die("socket_option() failed".socket_strerror(socket_last_error())); 8 9 socket_bind($this->master, $this->address, $this->port) 10 or die("socket_bind() failed".socket_strerror(socket_last_error())); 11 12 socket_listen($this->master,20) 13 or die("socket_listen() failed".socket_strerror(socket_last_error())); 14 15 $this->say("Server Started : ".date('Y-m-d H:i:s')); 16 $this->say("Master socket : ".$this->master); 17 $this->say("Listening on : ".$this->address." port ".$this->port."\n"); 18 19 }
然后启动监听,同时要维护连接到服务器的用户的一个数组(连接池),每连接一个用户,就要push进一个,同时关闭连接后要删除相应的用户的连接。
1 public function __construct($a, $p) 2 { 3 if ($a == 'localhost') 4 $this->address = $a; 5 else if (preg_match('/^[\d\.]*$/is', $a)) 6 $this->address = long2ip(ip2long($a)); 7 else 8 $this->address = $p; 9 10 if (is_numeric($p) && intval($p) > 1024 && intval($p) )
上一篇: 类与对象基础1
下一篇: laravel_day1
推荐阅读
-
HTML5实现WebSocket协议原理浅析
-
PHP防止sql注入小技巧之sql预处理原理与实现方法分析
-
php实例分享之通过递归实现删除目录下的所有文件详解
-
C#实现WebSocket协议客户端和服务器websocket sharp组件实例解析
-
PHP框架实现WebSocket在线聊天通讯系统
-
PHP设计模式入门之状态模式原理与实现方法分析
-
PHP用swoole+websocket和redis实现web一对一聊天
-
Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
-
PHP使用range协议实现输出文件断点续传代码实例
-
php+websocket 实现的聊天室功能详解