php的swoole的扩展可以实现WebSocket通信,方法如下

1、php添加swoole扩展;

一:两种安装方式:
1》编译安装:
1>wget http://pecl.php.net/get/swoole-1.9.6.tgz 或者 
    wget http://www.taikongliu.com/swoole/swoole-1.7.6-stable.tar.gz        //下载swoole    
2>tar -zxvf swoole-1.7.6-stable.tar.gz        //解压swoole
3>cd swoole-src-swoole-1.7.6-stable/        //进入swoole
4>/phpstudy/server/php/bin/phpize        //生成configure
5>./configure --with-php-config=/phpstudy/server/php/bin/php-config        //编译
6>make && make install            //安装
7>cd /phpstudy/server/php/lib/php/extensions/no-debug-non-zts-20121212    //查看是否安转上了swoole.so    (注意:此文件下边都是你安装的拓展)
8>vim /phpstudy/server/php/etc/php.ini     //在php.ini添加extension=swoole.so加入到文件最后一行
9>/phpstudy/server/nginx/sbin/nginx  -s reload    //重启nginx    
10>查看phpinfo,这时候swoole拓展已经装上了

2》PECL安装:
1>pecl install swoole    //如果以上步骤一切正常的话,即表示swoole已经成功的安装了。
2>extension=swoole.so            //成功之后,我们打开php.ini(不知道配置文件在哪的回去再把CLI看一遍),把swoole.so加入到文件最后
3>$ php -m | grep swoole    //查看swoole是否被正确的安装

注意:官方推荐使用PECL方式安装,如果服务端环境有两个php环境,一个是rpm包安装的,一个是编译安装,那么PECL安装应用到rpm的PHP下,遇到个坑,由于使用的是php编译安装的环境,而我用PECL安装swoole,总是在phpinfo()函数中加载不出swoole扩展

2、服务端:创建服务端文件server.php(该文件可以放到任何目录下)

$server = new swoole_websocket_server("0.0.0.0", 9501);
$server->set(array(
'worker_num' => 8, //工作进程数量
'daemonize' => true, //是否作为守护进程
)); $server->on('open', function (swoole_websocket_server $server, $request) {
echo "server: handshake success with fd{$request->fd}\n";
}); $server->on('message', function (swoole_websocket_server $server, $frame) {
file_put_contents('2.txt',$frame->fd.':'.$frame->data.'opcode:'.$frame->opcode.'fin:'.$frame->finish);
echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";
$server->push($frame->fd, "this is server");
}); $server->on('close', function ($ser, $fd) {
echo "client {$fd} closed\n";
}); $server->start();

开启进程 php ./server.php

注意:如果daemonize 配置为true则 php ./server.php 开启进程后该进程常住系统内存,如果未开启则不能中断 php ./server.php

3、客户端:使用html5的WebSocket请求服务端

ws = new WebSocket("ws://192.168.152.129:9501");
console.log(ws);
ws.onopen = function() {
console.log("open");
ws.send("send message");
}
ws.onmessage = function(e) {
console.log(e.data);
}
ws.onclose = function(e) {
console.log("closed");
}
ws.onerror = function(e) {
console.log("error");
}

当ws.send的时候回调用服务端 $server->on('message', function (swoole_websocket_server $server, $frame)方法 并且返回 "this is server"

php基于swoole扩展的WebSocket的更多相关文章

  1. 使用php开发,基于swoole扩展开发的工具 swoole-crontab 作业/任务调度

    Swoole-Crontab(基于Swoole扩展) 1.概述 基于swoole的定时器程序,支持秒级处理. 异步多进程处理. 完全兼容crontab语法,且支持秒的配置,可使用数组规定好精确操作时间 ...

  2. 【原】用PHP搭建基于swoole扩展的socket服务(附PHP扩展的安装步骤及Linux/shell在线手册)

    最近公司的一项目中,需要用PHP搭建一个socket服务. 本来PHP是不适合做服务的,因为和第三方合作,需要采用高效而稳定的TCP协议进行数据通信.经过多次尝试,最终选择了开源的PHP扩展:swoo ...

  3. 基于swoole扩展实现真正的PHP数据库连接池

    转自:  http://rango.swoole.com/archives/265 PHP的数据库连接池一直以来都是一个难题,很多从PHP语言转向Java的项目,大多数原因都是因为Java有更好的连接 ...

  4. websocket和基于swoole的简易即时通讯

    这里描述个基于swoole的websocket 匿名群聊 UI <!DOCTYPE html> <html> <head> <meta charset=&qu ...

  5. 基于swoole的网页一对一实时聊天

    需求分析 网站上实现一对一即时沟通,能查看聊天记录以及离线留言,新消息提醒. 核心技术 html5的websocket,php的swoole扩展http://wiki.swoole.com/ 数据表 ...

  6. LaravelS - 基于Swoole加速Laravel/Lumen

    LaravelS LaravelS是一个胶水项目,用于快速集成Swoole到Laravel或Lumen,然后赋予它们更好的性能.更多可能性.Github 特性 内置Http/WebSocket服务器 ...

  7. Node.js的颠覆者:PHP的Swoole扩展

          最近2年Node.js很火,异步与协程是网络开发方面热门的话题.在追求新技术的同时,也应该反思下这里面存在的陷阱.Node.js确实是一门有趣好玩有个性的语言和技术,动态性,全异步回调的方 ...

  8. DDD:四色原型中Role的 “六” 种实现方式和PHP的Swoole扩展

    目录 背景六种实现方式第一种:未显式体现角色的模式.第二种:使用“显式接口”显式体现角色的模式.第三种:使用“扩张方法”显式体现角色的模式.第四种:使用“领域服务”显式体现角色的模式.第五种:使用“包 ...

  9. 基于SWOOLE的分布式SOCKET消息服务器架构

    消息服务器使用socket,为避免服务器过载,单台只允许500个socket连接,当一台不够的时候,扩充消息服务器是必然,问题来了,如何让链接在不同消息服务器上的用户可以实现消息发送呢? 要实现消息互 ...

随机推荐

  1. web.config配置数据库连接 【转】

    http://www.cnblogs.com/breezeblew/archive/2008/05/01/1178719.html 第一种: 取连接字符串 = System.Web.Configura ...

  2. 七天学会ASP.NET MVC(七)——创建单页应用 【转】

    http://www.cnblogs.com/powertoolsteam/p/MVC_Seven.html 系列文章 七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC 七天学 ...

  3. 解决使用maven jetty启动后无法加载修改过后的静态资源

    jetty模式是不能修改js文件的,比如你现在调试前端js,发现在myeclipse/eclipse的源码里面无法修改文件,点都不让你点,所以,你只能采用一些办法,更改jetty的模式配置. Look ...

  4. LeetCode Search in Rotated Sorted Array II -- 有重复的旋转序列搜索

    Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...

  5. Cloudera

    官方文档: http://www.cloudera.com/content/cloudera/en/documentation/core/latest/ 博客教程 http://www.wangyon ...

  6. 监听iOS检测屏幕旋转状态,不需开启屏幕旋转

    -(void)rotation_icon:(float)n { UIButton *history_btn= [self.view viewWithTag:<#(NSInteger)#>] ...

  7. 使用robotframework常见的几个问题

    问题1:用rf运行IEdriver的速度好慢,比如在输入框输入用户名,一秒输入一个字符.你们的是不是这样子的?.如果是chromedriver就很快 解决办法:把IEDriver从64位换成32位 , ...

  8. Mode Standby

    Modern Standby 1.Connected Standby和 Connected Standby是Windows 8全新的电源管理系统,即当系统进入休眠状态时,应用程式虽处於暂停(suspe ...

  9. ExtJs4学习(二):Dom操作

    如今主流的JS框架要数ExtJs和JQuery应用的比較广泛.JQuery属于轻量级的,一般做站点应用比較常见.可见块头小的优势. ExtJs比較庞大,它除了对主要的JS语法和HTML DOM操作方式 ...

  10. Fakeapp2.2安装,使用简记--------------转载自iJessie

    原文:https://www.cnblogs.com/iJessie/p/8568377.html 1,硬件和操作系统,支持cuda的Nvidia显卡,8G及以上的内存,Windows10 x64(推 ...