这里主要运用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
编译安装
- cd swoole
- phpize
- ./configure
- make
- sudo make install
配置php.ini
加入
通过
php -m
或
phpinfo()
来查看是否成功加载了swoole;
安装完成后 参考这里代码实现许多功能
http://wiki.swoole.com/wiki/page/479.html
现在我给出的是一个能够简单聊天的功能代码
前台
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Document</title>
- </head>
- <body>
- <h3>demo 1</h3>
- <table>
- <tr>
- <td><input type="text" id="text"></td>
- </tr>
- <tr>
- <td><input type="button" value="点击" onclick="ab()"></td>
- </tr>
- </table>
- <div id="div" style="width:200px; height:200px;" }>
-
- </div>
- </body>
- </html>
- //引入一个jQuery文件
- <script src="jquery-1.9.1.js"></script>
- <script>
- var wsServer = 'ws://192.168.1.113:9502';//这里的IP应该更改
- var websocket = new WebSocket(wsServer);
- websocket.onopen = function (evt) {
- console.log("Connected to WebSocket server.");
- };
- websocket.onclose = function (evt) {
- console.log("Disconnected");
- };
-
- websocket.onmessage = function (evt) {
- $('#div').append(evt.data+"<br>");
- // document.getElementById('div').style.background = evt.data;
- console.log('Retrieved data from server: ' + evt.data);
- };
-
- websocket.onerror = function (evt, e) {
- console.log('Error occured: ' + evt.data);
- };
- function ab(){
- var zhi=document.getElementById('text').value;
- websocket.send(zhi);
- }
-
- </script>
服务器代码
- <?PHP
-
- //创建websocket服务器对象,监听0.0.0.0:9502端口
- $ws = new swoole_websocket_server("0.0.0.0", 9502);
-
- //监听WebSocket连接打开事件
- $ws->on('open', function ($ws, $request) {
- var_dump($request->fd, $request->get, $request->server);
- //获取所有连接人存为数组
- $GLOBALS['fd'][] = $request->fd;
- //$ws->push($request->fd, "hello, welcome\n");
- });
-
- //监听WebSocket消息事件
- $ws->on('message', function ($ws, $frame) {
- echo "Message: {$frame->data}\n";
- //循环所有连接人发送内容
- foreach($GLOBALS['fd'] as $key => $val){
- $ws->push($val,$frame->data);
- }
- //$ws->push($frame->fd, "{$frame->data}");
- });
-
- //监听WebSocket连接关闭事件
- $ws->on('close', function ($ws, $fd) {
- echo "client-{$fd} is closed\n";
- });
-
- $ws->start();
运行服务器文件在命令行中执行
PHP 文件名
运行后 浏览器打开前台文件