php异步操作(实现简单聊天功能)

这里主要运用swoole实现简单的聊天功能

首先我们安装swoole 

目前

  • 仅支持Linux,FreeBSD,MacOS,3类操作系统
  • Linux内核版本2.3.32以上
  • PHP5.3.10以上版本,包括PHP7
  • gcc4.4以上版本或者clang
  • cmake2.4+,编译为libswoole.so作为C/C++库时需要使用cmake
  • swoole仅支持PHP5.3.10或更高版本,建议使用PHP5.4+
  • 推荐使用centos Ubuntu12 Debian6 我用的是centos7.0 下面也是7.0的安装以及运用

下载地址 http://pecl.php.net/package/swoole

编译安装

[python]  view plain  copy
 print ?
  1. cd swoole  
  2. phpize  
  3. ./configure  
  4. make   
  5. sudo make install  
配置php.ini

加入
[php]  view plain  copy
 print ?
  1. extension=swoole.so  
通过 php -m phpinfo() 来查看是否成功加载了swoole;

安装完成后 参考这里代码实现许多功能

http://wiki.swoole.com/wiki/page/479.html

现在我给出的是一个能够简单聊天的功能代码

前台  

[html]  view plain  copy
 print ?
  1. <!DOCTYPE html>  
  2. <html lang="en">  
  3. <head>  
  4.     <meta charset="UTF-8">  
  5.     <title>Document</title>  
  6. </head>  
  7. <body>  
  8. <h3>demo 1</h3>  
  9.     <table>  
  10.         <tr>  
  11.             <td><input type="text" id="text"></td>  
  12.         </tr>  
  13.         <tr>  
  14.             <td><input type="button" value="点击" onclick="ab()"></td>  
  15.         </tr>  
  16.     </table>  
  17.     <div id="div" style="width:200px; height:200px;" }>  
  18.           
  19.     </div>  
  20. </body>  
  21. </html>  
  22. //引入一个jQuery文件  
  23. <script src="jquery-1.9.1.js"></script>  
  24. <script>  
  25.     var wsServer = 'ws://192.168.1.113:9502';//这里的IP应该更改  
  26.     var websocket = new WebSocket(wsServer);  
  27.     websocket.onopen = function (evt) {  
  28.         console.log("Connected to WebSocket server.");  
  29.     };  
  30.  websocket.onclose = function (evt) {  
  31.         console.log("Disconnected");  
  32.     };  
  33.   
  34.     websocket.onmessage = function (evt) {  
  35.         $('#div').append(evt.data+"<br>");  
  36.         // document.getElementById('div').style.background = evt.data;  
  37.         console.log('Retrieved data from server: ' + evt.data);  
  38.     };  
  39.   
  40.     websocket.onerror = function (evt, e) {  
  41.         console.log('Error occured: ' + evt.data);  
  42.     };  
  43. function ab(){  
  44.     var zhi=document.getElementById('text').value;  
  45.     websocket.send(zhi);   
  46. }  
  47.   
  48. </script>  
服务器代码

[python]  view plain  copy
 print ?
  1. <?PHP  
  2.   
  3. //创建websocket服务器对象,监听0.0.0.0:9502端口  
  4. $ws = new swoole_websocket_server("0.0.0.0"9502);  
  5.   
  6. //监听WebSocket连接打开事件  
  7. $ws->on('open', function ($ws, $request) {  
  8.     var_dump($request->fd, $request->get, $request->server);  
  9.     //获取所有连接人存为数组  
  10.     $GLOBALS['fd'][] = $request->fd;  
  11.     //$ws->push($request->fd, "hello, welcome\n");  
  12. });  
  13.   
  14. //监听WebSocket消息事件  
  15. $ws->on('message', function ($ws, $frame) {  
  16.     echo "Message: {$frame->data}\n";  
  17. //循环所有连接人发送内容  
  18.       foreach($GLOBALS['fd'] as $key => $val){  
  19.             $ws->push($val,$frame->data);  
  20.       }  
  21.    //$ws->push($frame->fd, "{$frame->data}");  
  22. });  
  23.   
  24. //监听WebSocket连接关闭事件  
  25. $ws->on('close', function ($ws, $fd) {  
  26.     echo "client-{$fd} is closed\n";  
  27. });  
  28.   
  29. $ws->start();  

运行服务器文件在命令行中执行

PHP 文件名

运行后 浏览器打开前台文件

猜你喜欢

转载自blog.csdn.net/hwk_yellow/article/details/53187896