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. 黑苹果+win10双系统折腾笔记

    寒假趁机在家折腾一下黑苹果 笔记本配置:神船K610D I7 4600 ,其他配置思路一样,驱动要自己找 镜像和工具:OS X Yosemite 10.10.3 镜像 WIN10 TLSB 2016 ...

  2. js 淘宝评分

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  3. 【SQLServer】Microsoft SQL Baseline Checklist

    今天调查了Microsoft SQL Baseline Checklist中的下面几个问题. Hide Instances Extended Store Procedures Maximum Numb ...

  4. java查看工具jmap-windows

    Prints shared object memory maps or heap memory details for a process, core file, or remote debug se ...

  5. vue.js+koa2项目实战(六)数据库建表

    数据库建表 1.打开 MySQL 终端 2.查看所有数据库 show databases 3.创建数据库 create database pet 4.进入数据库 use pet 5.创建数据表 cre ...

  6. Cloudera

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

  7. sudo apt-get update 没有公钥,无法验证下列签名

    在更新系统源后,输入sudo apt-get update之后出现提示: W: GPG 错误:http://archive.ubuntukylin.com:10006 xenial InRelease ...

  8. Redis学习手册(List数据类型)(转)

    一.概述: 在Redis中,List类型是按照插入顺序排序的字符串链表.和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的 元素.在插入时,如果该键并不存在,Redi ...

  9. 牛牛有一个鱼缸。鱼缸里面已经有n条鱼,每条鱼的大小为fishSize[i] (1 ≤ i ≤ n,均为正整数),牛牛现在想把新捕捉的鱼放入鱼缸。鱼缸内存在着大鱼吃小鱼的定律。经过观察,牛牛发现一条鱼A的大小为另外一条鱼B大小的2倍到10倍(包括2倍大小和10倍大小),鱼A会吃掉鱼B。考虑到这个,牛牛要放入的鱼就需要保证:1、放进去的鱼是安全的,不会被其他鱼吃掉 2、这条鱼放进去也不能吃掉其他鱼

    // ConsoleApplication5.cpp : 定义控制台应用程序的入口点. // #include<vector> #include<algorithm> #inc ...

  10. 利用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 ...