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连接,当一台不够的时候,扩充消息服务器是必然,问题来了,如何让链接在不同消息服务器上的用户可以实现消息发送呢? 要实现消息互 ...
随机推荐
- 黑苹果+win10双系统折腾笔记
寒假趁机在家折腾一下黑苹果 笔记本配置:神船K610D I7 4600 ,其他配置思路一样,驱动要自己找 镜像和工具:OS X Yosemite 10.10.3 镜像 WIN10 TLSB 2016 ...
- js 淘宝评分
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- 【SQLServer】Microsoft SQL Baseline Checklist
今天调查了Microsoft SQL Baseline Checklist中的下面几个问题. Hide Instances Extended Store Procedures Maximum Numb ...
- java查看工具jmap-windows
Prints shared object memory maps or heap memory details for a process, core file, or remote debug se ...
- vue.js+koa2项目实战(六)数据库建表
数据库建表 1.打开 MySQL 终端 2.查看所有数据库 show databases 3.创建数据库 create database pet 4.进入数据库 use pet 5.创建数据表 cre ...
- Cloudera
官方文档: http://www.cloudera.com/content/cloudera/en/documentation/core/latest/ 博客教程 http://www.wangyon ...
- sudo apt-get update 没有公钥,无法验证下列签名
在更新系统源后,输入sudo apt-get update之后出现提示: W: GPG 错误:http://archive.ubuntukylin.com:10006 xenial InRelease ...
- Redis学习手册(List数据类型)(转)
一.概述: 在Redis中,List类型是按照插入顺序排序的字符串链表.和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的 元素.在插入时,如果该键并不存在,Redi ...
- 牛牛有一个鱼缸。鱼缸里面已经有n条鱼,每条鱼的大小为fishSize[i] (1 ≤ i ≤ n,均为正整数),牛牛现在想把新捕捉的鱼放入鱼缸。鱼缸内存在着大鱼吃小鱼的定律。经过观察,牛牛发现一条鱼A的大小为另外一条鱼B大小的2倍到10倍(包括2倍大小和10倍大小),鱼A会吃掉鱼B。考虑到这个,牛牛要放入的鱼就需要保证:1、放进去的鱼是安全的,不会被其他鱼吃掉 2、这条鱼放进去也不能吃掉其他鱼
// ConsoleApplication5.cpp : 定义控制台应用程序的入口点. // #include<vector> #include<algorithm> #inc ...
- 利用GROUP_CONCAT函数把相同信息的合并到同一个字段中
SELECT a.*,GROUP_CONCAT(b.pri_name) FROM sh_role a LEFT JOIN sh_privilege b ON FIND_IN_SET(b.id,a.pr ...