基于Swoole实现PHP与websocket聊天室
websocketWebsocket只是一个网络通信协议 就像 http、ftp等都是网络通信的协议;不要多想; 相对于HTTP这种非持久的协议来说,Websocket是一个持久化网络通信的协议; WebSocket和HTTP的关系有交集,但是并不是全部。 Websocket只是借用了HTTP的一部分协议来完成一次握手。(HTTP的三次握手,此处只完成一次) http和websocket 请求头对比:HTTP:原来的时候,客户端通过http(骑马)带着信请求服务器,服务器处理请求(写回信),再次通过http(骑马)返回;链接断开; WebSocket:客户端通过http(骑马)带着信请求服务器,但同时,携带了 http和websocket 响应头对比:websocket和ajax轮询、long poll的区别首先是 ajax轮询 ,ajax轮询的原理非常简单,让浏览器隔个几秒就发送一次请求,询问服务器是否有新信息 场景再现:客户端:啦啦啦,有没有新信息(Request) 服务端:没有(Response) 客户端:啦啦啦,有没有新信息(Request) 服务端:没有。。(Response) 客户端:啦啦啦,有没有新信息(Request) 服务端:你好烦啊,没有啊。。(Response) 客户端:啦啦啦,有没有新消息(Request) 服务端:好啦好啦,有啦给你。(Response) 客户端:啦啦啦,有没有新消息(Request) 服务端:。。。没。。。。没。。没有 long poll其实原理跟ajax轮询 差不多,都是采用轮询的方式,不在论述;从上面可以看出,轮询其实就是在不断地建立HTTP连接,然后等待服务端处理,可以体现HTTP协议的另外一个特点, 被动性。同时,http的每一次请求与响应结束后,服务器将客户端信息全部丢弃,下次请求,必须携带身份信息(cookie),无状态性;Websocket的出现,干净利落的解决了这些问题;所以上面的情景可以做如下修改。 客户端:啦啦啦,我要建立Websocket协议,需要的服务: chat,Websocket协议版本:17(HTTP Request)服务端:ok,确认,已升级为Websocket协议(HTTP Protocols Switched) 客户端:麻烦你有信息的时候推送给我噢。。 服务端:ok,有的时候会告诉你的。 客户端:balab开始斗图alabala 服务端:苍井空ala 客户端:流鼻血了,我擦…… 服务端:哈哈布尔教育牛逼啊哈哈哈哈 服务端:笑死我了哈哈 Swoole但是,为了用PHP配合HTML5完成一次WebSocket请求和响应,哥走过千山万水,在密林深处,发现了Swoole : PHP语言的异步、并行、高性能网络通信框架,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。 支持的服务:HttpServer WebSocket Server TCP Server TCP Client Async-IO(异步) Task(定时任务) 环境依赖:仅支持Linux,FreeBSD,MacOS,3类操作系统 Linux内核版本2.3.32以上 PHP5.3.10以上版本 gcc4.4以上版本或者clang cmake2.4+,编译为libswoole.so作为C/C++库时需要使用cmake 安装:必须保证系统中有以下这些软件: php-5.3.10 或更高版本 gcc-4.4 或更高版本 make autoconf Swoole是作为PHP扩展来运行的安装(root权限): cd swoole phpize ./configure make sudo make install 配置php.ini extension=swoole.so 想研究Swoole的同学,自己去看手册(虽然写的不好,但是还是能看懂的) 做一个聊天室服务器端:socket.php//监听WebSocket连接打开事件
$ws->on('open',function ($ws,$request) { $fd[] = $request->fd; $GLOBALS['fd'][] = $fd; //$ws->push($request->fd,"hello,welcomen"); }); //监听WebSocket消息事件 //监听WebSocket连接关闭事件 $ws->start(); 客户端:Socket.html
Title
以上就是基于Swoole实现PHP与websocket聊天室的全部内容,相信本文对大家学习PHP和websocket及开发聊天室很有帮助。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |