php基于swoole扩展的WebSocket
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的更多相关文章
- 使用php开发,基于swoole扩展开发的工具 swoole-crontab 作业/任务调度
Swoole-Crontab(基于Swoole扩展) 1.概述 基于swoole的定时器程序,支持秒级处理. 异步多进程处理. 完全兼容crontab语法,且支持秒的配置,可使用数组规定好精确操作时间 ...
- 【原】用PHP搭建基于swoole扩展的socket服务(附PHP扩展的安装步骤及Linux/shell在线手册)
最近公司的一项目中,需要用PHP搭建一个socket服务. 本来PHP是不适合做服务的,因为和第三方合作,需要采用高效而稳定的TCP协议进行数据通信.经过多次尝试,最终选择了开源的PHP扩展:swoo ...
- 基于swoole扩展实现真正的PHP数据库连接池
转自: http://rango.swoole.com/archives/265 PHP的数据库连接池一直以来都是一个难题,很多从PHP语言转向Java的项目,大多数原因都是因为Java有更好的连接 ...
- websocket和基于swoole的简易即时通讯
这里描述个基于swoole的websocket 匿名群聊 UI <!DOCTYPE html> <html> <head> <meta charset=&qu ...
- 基于swoole的网页一对一实时聊天
需求分析 网站上实现一对一即时沟通,能查看聊天记录以及离线留言,新消息提醒. 核心技术 html5的websocket,php的swoole扩展http://wiki.swoole.com/ 数据表 ...
- LaravelS - 基于Swoole加速Laravel/Lumen
LaravelS LaravelS是一个胶水项目,用于快速集成Swoole到Laravel或Lumen,然后赋予它们更好的性能.更多可能性.Github 特性 内置Http/WebSocket服务器 ...
- Node.js的颠覆者:PHP的Swoole扩展
最近2年Node.js很火,异步与协程是网络开发方面热门的话题.在追求新技术的同时,也应该反思下这里面存在的陷阱.Node.js确实是一门有趣好玩有个性的语言和技术,动态性,全异步回调的方 ...
- DDD:四色原型中Role的 “六” 种实现方式和PHP的Swoole扩展
目录 背景六种实现方式第一种:未显式体现角色的模式.第二种:使用“显式接口”显式体现角色的模式.第三种:使用“扩张方法”显式体现角色的模式.第四种:使用“领域服务”显式体现角色的模式.第五种:使用“包 ...
- 基于SWOOLE的分布式SOCKET消息服务器架构
消息服务器使用socket,为避免服务器过载,单台只允许500个socket连接,当一台不够的时候,扩充消息服务器是必然,问题来了,如何让链接在不同消息服务器上的用户可以实现消息发送呢? 要实现消息互 ...
随机推荐
- 查找python项目依赖并生成requirements.txt
1.如果使用virtualenv环境,直接使用 pip freeze > requirements.txt ➜ ~ .virtualenvs/xxx/bin/pip freeze > r ...
- 【GLSL教程】(七)逐像素的光照 【转】
http://blog.csdn.net/racehorse/article/details/6662540 逐像素的方向光(Directional Light per Pixel) 这一节将把前面的 ...
- linux使用tar命令打包压缩时排除某个文件夹或文件
今天在使用tar命令进行文件夹打包压缩的时候,需要打包压缩masalaPage目录,但是该目录中的2017,2016两个目录中的文件不进行打包压缩 所以通常使用的tar -zcvf masalaPag ...
- maven setting.xml 配置(有效)
<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://mav ...
- Linux程序
1.如何找到一个进程的安装程序目录与启动目录 2.如何完全卸载一个程序
- UNP学习笔记(第二章:传输层)
本章的焦点是传输层,包括TCP.UDP和SCTP. 绝大多数客户/服务器网络应用使用TCP或UDP.SCTP是一个较新的协议. UDP是一个简单的.不可靠的数据报协议.而TCP是一个复杂.可靠的字节流 ...
- codeforces 283C
给 n 中 钱币.以及每两种钱币的关系,表示,ai 的 个数 要大于 bi 组合成一个价值val,求方案数,好奇妙的一个处理方式,不得不说又学到了 #include<stdio.h> #i ...
- linux 内核(系统)、函数的理解、宏的程序调试
1.操作系统 1.1.Linux 内核(系统)的组成的部分: 内核主要有:进程调度.内存管理.虚拟文件系统.网络接口和进程通信五个部分组成. (1)进程调度 进程调度是CPU对多个进程对CPU访问的调 ...
- awakeFromNib方法和viewDidLoad方法区别
当.nib文件被加载的时候,会发送一个awakeFromNib的消息到.nib文件中的每个对象,每个对象都可以定义自己的awakeFromNib函数来响应这个消息,执行一些必要的操作. 也就是说只有通 ...
- gulp 静态资源版本控制
package.json { "name": "gulp", "version": "0.0.1", "des ...