swoole安装基本配置

php安装swoole

1. 下载swoole安装

  1. wget http://pecl.php.net/get/swoole-1.9.1.tgz
  2. tar -zxvf swoole-1.9.1.tgz
  3. cd swoole-1.9.1
  4. phpize
  5. ./configure
  6. make
  7. make install

2. 在php.ini添加swoole.so

  1. extension=swoole.so

php -m查看是否安装成功

环境依赖

  • 仅支持Linux,FreeBSD,MacOS,3类操作系统
  • Linux内核版本2.3.32以上
  • PHP5.3.10以上版本
  • gcc4.4以上版本或者clang
  • cmake2.4+,编译为libswoole.so作为C/C++库时需要使用cmake

PHP版本依赖

  • swoole仅支持PHP5.3.10或更高版本,建议使用PHP5.4+
  • swoole不依赖php的stream、sockets、pcntl、posix、sysvmsg等扩展。PHP只需安装最基本的扩展即可

PHP直播代码

1.start.php 使用时需要开启,服务器输入(php start.php)

  1. <?php
  2. //php在线直播示例代码
  3. //使用PHPCLI模式运行
  4. //命令:php start.php
  5.  
  6. //设置路径
  7. define('_ROOT_', dirname(__FILE__));
  8. require_once _ROOT_.'/function.php';
  9. //监听地址和端口
  10. $server = new swoole_websocket_server("0.0.0.0(这里就是四个0,不要改)", 8888);
  11. //服务端接收连接事件
  12. $server->on('open', function (swoole_websocket_server $server, $request) {
  13. if(!file_exists(_ROOT_.'/client/'.$request->fd.'.client')){
  14. @file_put_contents(_ROOT_.'/client/'.$request->fd.'.client',$request->fd);
  15. }
  16. });
  17. //服务端接收信息事件
  18. $server->on('message', function (swoole_websocket_server $server, $frame) {
  19. foreach(notice(_ROOT_.'/client/') as $v){
  20. $server->push($v,$frame->data);
  21. }
  22. });
  23. //服务端接收关闭事件
  24. $server->on('close', function ($ser, $fd) {
  25. @unlink(_ROOT_.'/client/'.$fd.'.client');
  26. });
  27. //服务开启
  28. $server->start();

2.index.html 直播页面,访问该页面观看直播

  1. <!DOCTYPE html>
  2. <html>
  3. <head lang="en">
  4. <meta charset="UTF-8">
  5. <title>在线直播界面</title>
  6. </head>
  7. <body>
  8. <img id="receiver" style='width:640px;height:480px'/>
  9. <script type="text/javascript" charset="utf-8">
  10. var ws = new WebSocket("ws://改成自己服务器ip:8888");
  11. var image = document.getElementById('receiver');
  12. ws.onopen = function(){
  13.  
  14. }
  15. ws.onmessage = function(data)
  16. {
  17. image.src=data.data;
  18. }
  19. </script>
  20. </body>
  21. </html>

3.rec.html主播录制页面,访问该页面进行直播录制

  1. <!DOCTYPE html>
  2. <html>
  3. <head lang="en">
  4. <meta charset="UTF-8">
  5. <title>主播录制界面</title>
  6. </head>
  7. <body>
  8. <video id="video" autoplay="" style='width:640px;height:480px'></video>
  9. <canvas id="output" style="display:none"></canvas>
  10. <script type="text/javascript" charset="utf-8">
  11. var ws = new WebSocket("ws://自己服务器ip:8888");
  12. var back = document.getElementById('output');
  13. var backcontext = back.getContext('2d');
  14. var video = document.getElementById("video");
  15. var success = function(stream){
  16. video.src = window.URL.createObjectURL(stream);
  17. }
  18. ws.onopen = function(){
  19. draw();
  20. }
  21. var draw = function(){
  22. try{
  23. backcontext.drawImage(video,0,0, back.width, back.height);
  24. }catch(e){
  25. if (e.name == "NS_ERROR_NOT_AVAILABLE") {
  26. return setTimeout(draw, 100);
  27. } else {
  28. throw e;
  29. }
  30. }
  31. if(video.src){
  32. ws.send(back.toDataURL("image/jpeg", 0.5));
  33. }
  34. setTimeout(draw, 100);
  35. }
  36. navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
  37. navigator.mozGetUserMedia || navigator.msGetUserMedia;
  38. navigator.getUserMedia({video:true, audio:false}, success, console.log);
  39. </script>
  40. </body>
  41. </html>

4.function.php 统计数据页面

  1. <?php
  2. //统计在线人数
  3. function clearDir($dir)
  4. {
  5. $n = 0;
  6. if ($dh = opendir($dir))
  7. {
  8. while (($file = readdir($dh)) !== false)
  9. {
  10. if ($file == '.' or $file == '..')
  11. {
  12. continue;
  13. }
  14. if (is_file($dir . $file)) {
  15. $n++;
  16. }
  17. }
  18. }
  19. closedir($dh);
  20. return $n;
  21. }
  22.  
  23. //通知在线的人
  24. function notice($dir){
  25. if ($dh = opendir($dir))
  26. {
  27. while (($file = readdir($dh)) !== false)
  28. {
  29. if ($file == '.' or $file == '..')
  30. {
  31. continue;
  32. }
  33. if (is_file($dir . $file)) {
  34. $array[]=file_get_contents($dir.$file);
  35. }
  36. }
  37. }
  38. closedir($dh);
  39. return $array;
  40. }

5.在同级目录php

PHP 即使通讯

1.socket.php 一样,使用时需要开启

  1. 复制代码
  2.  
  3. <?php
  4. //创建websocket服务器对象,监听0.0.0.0:9502端口
  5. $ws = new swoole_websocket_server("0.0.0.0", 9502);
  6.  
  7. //监听WebSocket连接打开事件
  8. $ws->on('open', function ($ws, $request) {
  9. $fd[] = $request->fd;
  10. $GLOBALS['fd'][] = $fd;
  11. //$ws->push($request->fd, "hello, welcome\n");
  12. });
  13.  
  14. //监听WebSocket消息事件
  15. $ws->on('message', function ($ws, $frame) {
  16. $msg = 'from'.$frame->fd.":{$frame->data}\n";
  17. //var_dump($GLOBALS['fd']);
  18. //exit;
  19. foreach($GLOBALS['fd'] as $aa){
  20. foreach($aa as $i){
  21. $ws->push($i,$msg);
  22. }
  23. }
  24. // $ws->push($frame->fd, "server: {$frame->data}");
  25. // $ws->push($frame->fd, "server: {$frame->data}");
  26. });
  27.  
  28. //监听WebSocket连接关闭事件
  29. $ws->on('close', function ($ws, $fd) {
  30. echo "client-{$fd} is closed\n";
  31. });
  32.  
  33. $ws->start();

2.socket.html聊天页面

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8. <div id="msg"></div>
  9. <input type="text" id="text">
  10. <input type="submit" value="发送数据" onclick="song()">
  11. </body>
  12. <script>
  13. var msg = document.getElementById("msg");
  14. var wsServer = 'ws://60.205.208.176:9502';
  15. //调用websocket对象建立连接:
  16. //参数:ws/wss(加密)://ip:port (字符串)
  17. var websocket = new WebSocket(wsServer);
  18. //onopen监听连接打开
  19. websocket.onopen = function (evt) {
  20. //websocket.readyState 属性:
  21. /*
  22. CONNECTING 0 The connection is not yet open.
  23. OPEN 1 The connection is open and ready to communicate.
  24. CLOSING 2 The connection is in the process of closing.
  25. CLOSED 3 The connection is closed or couldn't be opened.
  26. */
  27. msg.innerHTML = websocket.readyState;
  28. };
  29.  
  30. function song(){
  31. var text = document.getElementById('text').value;
  32. document.getElementById('text').value = '';
  33. //向服务器发送数据
  34. websocket.send(text);
  35. }
  36. //监听连接关闭
  37. // websocket.onclose = function (evt) {
  38. // console.log("Disconnected");
  39. // };
  40.  
  41. //onmessage 监听服务器数据推送
  42. websocket.onmessage = function (evt) {
  43. msg.innerHTML += evt.data +'<br>';
  44. // console.log('Retrieved data from server: ' + evt.data);
  45. };
  46. //监听连接错误信息
  47. // websocket.onerror = function (evt, e) {
  48. // console.log('Error occured: ' + evt.data);
  49. // };
  50.  
  51. </script>
  52. </html>
 
 
 
 

利用Swoole实现PHP+websocket直播,即使通讯代码,及linux下swoole安装基本配置的更多相关文章

  1. LINUX环境下SVN安装与配置(利用钩子同步开发环境与测试环境)

    安装采用YUM一键安装: 1.环境Centos 6.6 2.安装svnyum -y install subversion 3.配置 建立版本库目录mkdir /www/svndata svnserve ...

  2. 利用Swoole实现PHP+websocket直播,即使通讯

    websocket Websocket只是一个网络通信协议,就像 http.ftp等都是网络通信的协议一样:相对于HTTP这种非持久的协议来说,Websocket是一个持久化网络通信的协议: WebS ...

  3. Linux下swoole的安装配置

    前几天搭建swoole环境,在安装php的swoole扩展时不知道什么原因,提示成功,但是使用的时候不能加载,最后决定重新安装php试试,顺便记录了php的安装过程 wget http://cn2.p ...

  4. linux下swoole的安装

    //官方推荐的安装方式1:下载压缩包 wget https://github.com/swoole/swoole-src/archive/swoole-1.8.4-stable.zip 2:解压缩 u ...

  5. Swoole跟thinkphp5结合开发WebSocket在线聊天通讯系统

    ThinkPHP使用Swoole需要安装 think-swoole Composer包,前提系统已经安装好了Swoole PECL 拓展* tp5的项目根目录下执行composer命令安装think- ...

  6. JavaEE7 HTML5利用WebSocket实现即时通讯

    HTML5给Web浏览器带来了全双工TCP连接websocket标准服务器的能力. 换句话说,浏览器能够与服务器建立连接,通过已建立的通信信道来发送和接收数据而不需要由HTTP协议引入额外其他的开销来 ...

  7. Android WebSocket实现即时通讯功能

    最近做这个功能,分享一下.即时通讯(Instant Messaging)最重要的毫无疑问就是即时,不能有明显的延迟,要实现IM的功能其实并不难,目前有很多第三方,比如极光的JMessage,都比较容易 ...

  8. 实现websocket 主动消息推送,用laravel+Swoole

    近来有个需求:想实现一个可以主动触发消息推送的功能,这个可以实现向模板消息那个,给予所有成员发送自定义消息,而不需要通过客户端发送消息,服务端上message中监听传送的消息进行做相对于的业务逻辑. ...

  9. php基于swoole扩展的WebSocket

    php的swoole的扩展可以实现WebSocket通信,方法如下 1.php添加swoole扩展: 一:两种安装方式:1>编译安装:1>wget http://pecl.php.net/ ...

随机推荐

  1. mixin 在传参中可以出现 参数 在类内部可以定义 作用域

    mixin 在传参中可以出现 参数  在类内部可以定义

  2. java集合的部分接口

    接口 Collection<E> public interface Collection<E>extends Iterable<E> Collection 层次结构 ...

  3. JS基础知识简介

    使用js的三种方式 1.HTML标签内嵌js <button onclick="javascript:alert(真点啊)">有本事点我</button> ...

  4. 洛谷 P4819 [中山市选]杀人游戏

    洛谷 题目就是让我们在DAG中找到一些点,覆盖所有点. 因为是DAG,可以想到tarjan缩一下点.假设我们需要找x个点,那么答案就是(n-x)/n. 我们怎么选点呢? 敏锐的我们很快就能想到,直接选 ...

  5. SpringMVC 课纲

    SpringMVC 课纲 第一章 SpringMVC 架构 一个简单的 web 项目,校验器 SpringMVC 组件及相互关系 第二章 数据绑定 form标签库 第三章 Converter 和 Fo ...

  6. centos7 yum安装MongoDB

    centos7 yum安装MongoDB   原文博客地址http://xgs888.top/post/view?id=64 centos7 yum安装mongodb: 1:创建仓库 vi /etc/ ...

  7. 006-搭建框架-实现AOP机制【三】AOP技术

    2.3.spring+aspectj Spring在集成了aspectj后,同时也保留了以上的切面与代理的配置方式. 将Spring与aspectj集成与直接使用aspectj不同,不需要定义Aspe ...

  8. 基于twemproxy的redis集群部署

    一.系统及软件版本 操作系统:CentOS Linux release 7.3.1611 (Core) 内核版本:3.10.0-514.el7.x86_64 redis版本:3.2.8 twempro ...

  9. 常见Web源码泄露总结

    来自:http://www.hacksec.cn/Penetration-test/474.html 摘要 背景 本文主要是记录一下常见的源码泄漏问题,这些经常在web渗透测试以及CTF中出现. .h ...

  10. 用matlab将nc数据读出来,写成二进制文件,然后用grads画图

    clear,clc nt=735;ny=73;    %2.5*2.5格点的nx=144;    %2.5*2.5格点的f=netcdf('air.mon.mean.nc','nowrite');tt ...