精华内容
下载资源
问答
  • 这里大概介绍一下背景,我们的服务器上面主要是跑各种PHP接口,每个接口都有独立的日志,由于磁盘只有一个磁头(这显然谁都知道,ORZ...),而日志又是独立的,即一次请求过来就需要写一次日志,由于日志保存的位置...

    一、问题背景

      最近项目遇到一个问题,服务器响应很慢,team中的两个有经验的工程师找了一台服务器分析了一下,发现问题出在磁盘写入过于频繁。这里大概介绍一下背景,我们的服务器上面主要是跑各种PHP接口,每个接口都有独立的日志,由于磁盘只有一个磁头(这显然谁都知道,ORZ...),而日志又是独立的,即一次请求过来就需要写一次日志,由于日志保存的位置不同,也就是一次请求磁头就需要移动一个位置,机械硬盘大家懂得,这样显然就会导致了日志写入的速度很慢,从而拖慢了服务器的响应时间。

    二、解决思路

      显然问题就出在日志的频繁写入上,试想如果能有一个专门的日志服务来接收日志,而不是每次都直接往硬盘中写入。在此基础上再加入一些缓存机制,写日志的问题肯定会好很多。OK,问题的思路有了,但是如何来搭这套服务呢?有没有一些直接可用的解决方案呢?显然是有的,毕竟我肯定不是第一个遇到这个问题的人。team中的老司机们说 rsyslog 应该能够满足这个要求,而且团队目前也有在用这个服务,可以了解一下。

    三、解决问题的步骤

      1、什么是rsyslog,它能干什么:

      上面说到了 rsyslog 这个工具, rsyslog 是什么呢?简单说 rsyslog 其实是一个集中日志服务器,它可以支持 tcp、udp或者本地文件等当时的输入,然后支持把日志写入到 本地、数据库等等,如下图所示:

      http://www.rsyslog.com/common/images/rsyslog-features-imagemap.png

    什么?要再具体的说下,请参考官网: http://www.rsyslog.com/ 

      2、如何安装 rsyslog 

      centos下安装rsyslog灰常简单,如你所见:  

    	$  yum install rsyslog
    

       3、配置 rsyslog,官网有配置的向导,链接: http://www.rsyslog.com/rsyslog-configuration-builder/,这个做得非常人性化。上面说到 rsyslog 可以支持 TCP、UDP等方式的接收日志,这里不妨先用TCP的方式测试一下,然后把日志写到本地一个tmp 目录。生成的配置如下,然后把这个配置放到 /etc/rsyslog.conf 下面。

    # 加载tcp模块
    module(load="imtcp")
    # tcp方式接收日志,端口号为 514
    input(type="imtcp" port="514")
    # 接收日志后,写入到本地/data1/tmp/testlog 中 action(type="omfile" File="/data1/tmp/testlog")

      怎么样,看上去是不是非常简洁,是的,就是这么简单!

      4、启动rsyslog服务,这一步也灰常简单,如下:

    	$  service rsyslog start 
    

      然后你可以用 ps 命令看下服务是否启动了,如下:

    	$  ps -aux | grep rsyslog 
    

      如果看到类似下图所示的情况,那么服务就起来了:

      5、测试一下服务

      写一个简单的php代码,如下:  

    <?php
    
    $errno = '';
    $errstr = '';
    $fp = stream_socket_client("tcp://xx.xx.xx.xx:514", $errno, $errstr, 30); // 这里需要替换成你的ip地址或者域名
    if (!$fp) {
    	echo "$errstr ($errno)<br />\n";
    } else {
    	fwrite($fp, "test message !\n");
    	fclose($fp);
    }
    

     然后运行一下这段代码,可以在 /data1/tmp/testlog (上面指定的接收文件)日志中找到如下一条记录,那么服务就正式搭好了。

     

    今天暂时就写到这里,未完待续!

     

    转载于:https://www.cnblogs.com/smallrookie/p/5677004.html

    展开全文
  • 是的,在 JavaScript 中远程调用都是采用异步方式的,也就是说要获得结果,需要回调函数,回调函数作为远程方法的最后一个参数,回调函数也有四个参数,这里我们只使用第一个参数,也就是返回结果 result,通过 ...
  • 记我的第一个php代码

    2021-01-12 17:18:18
    之前go了webservers的接口,想看看前端web如何调用api,将我需要的数据实时展示在前端web上,查了html的资料,查了javascript的资料,又了解了下php,花了很多时间配置php-apache-masql环境(前文),尝试了下...

    之前用go写了webservers的接口,想看看前端web如何调用api,将我需要的数据实时展示在前端web上,查了html的资料,查了javascript的资料,又了解了下php,花了很多时间配置php-apache-masql环境(前文),尝试了下php差我本地mysql的代码,很简单,记录下我的第一个php代码

    <?php
    echo "开始连接数据库...\n";
       $host = "localhost";
       $username  = "root";
       $passwd = "123456";
       $dbname = "analysis_test";
    
       //建立连接
       $con = mysqli_connect($host, $username, $passwd, $dbname);
    
       if($con){
          print("已成功建立连接\n");
       }else{
          print("连接失败\n ");
       }
       $sql = "SELECT * FROM websites";
    if($result = mysqli_query($con, $sql)){
        if(mysqli_num_rows($result) > 0){
            echo "<table>";
                echo "<tr>";
                    echo "<th>id</th>";
                    echo "<th>name</th>";
                    echo "<th>url</th>";
                    echo "<th>country</th>";
                echo "</tr>\n";
            while($row = mysqli_fetch_array($result)){
                echo "<tr>";
                    echo "<td>" . $row['id'] . "</td>";
                    echo "<td>" . $row['name'] . "</td>";
                    echo "<td>" . $row['url'] . "</td>";
                    echo "<td>" . $row['country'] . "</td>";
                echo "</tr>\n";
            }
            echo "</table>\n";
            // 释放结果集
            mysqli_free_result($result);
        } else{
            echo "找不到与您的查询匹配的记录。";
        }
    } else{
        echo "错误:无法执行 $sql. " . mysqli_error($con);
    }
     
    //关闭连接
    mysqli_close($con);
    ?>
    
    开始连接数据库...
    已成功建立连接
    <table><tr><th>id</th><th>name</th><th>url</th><th>country</th></tr>
    <tr><td>1</td><td>Google</td><td>https://www.google.cm/</td><td>USA</td></tr>
    <tr><td>2</td><td>??</td><td>https://www.taobao.com/</td><td>CN</td></tr>
    <tr><td>3</td><td>????</td><td>http://www.runoob.com/</td><td>CN</td></tr>
    <tr><td>4</td><td>??</td><td>http://weibo.com/</td><td>CN</td></tr>
    <tr><td>5</td><td>Facebook</td><td>https://www.facebook.com/</td><td>USA</td></tr>
    </table>
    

    下面看看将数据显示到web及html配合控件输出
    细心地同学也许发现上面中文乱码了,有空研究

    展开全文
  • 是的,在 JavaScript 中远程调用都是采用异步方式的,也就是说要获得结果,需要回调函数,回调函数作为远程方法的最后一个参数,回调函数也有四个参数,这里我们只使用第一个参数,也就是返回结果 result,通过 ...
  • 是的,在 JavaScript 中远程调用都是采用异步方式的,也就是说要获得结果,需要回调函数,回调函数作为远程方法的最后一个参数,回调函数也有四个参数,这里我们只使用第一个参数,也就是返回结果 result,通过 ...
  • 是的,在 JavaScript 中远程调用都是采用异步方式的,也就是说要获得结果,需要回调函数,回调函数作为远程方法的最后一个参数,回调函数也有四个参数,这里我们只使用第一个参数,也就是返回结果 result,通过 ...
  • 是的,在 JavaScript 中远程调用都是采用异步方式的,也就是说要获得结果,需要回调函数,回调函数作为远程方法的最后一个参数,回调函数也有四个参数,这里我们只使用第一个参数,也就是返回结果 result,通过 ...
  • 是的,在 JavaScript 中远程调用都是采用异步方式的,也就是说要获得结果,需要回调函数,回调函数作为远程方法的最后一个参数,回调函数也有四个参数,这里我们只使用第一个参数,也就是返回结果 result,通过 ...
  • 是的,在 JavaScript 中远程调用都是采用异步方式的,也就是说要获得结果,需要回调函数,回调函数作为远程方法的最后一个参数,回调函数也有四个参数,这里我们只使用第一个参数,也就是返回结果 result,通过 ...
  • node搭建微信平台()--调环境

    千次阅读 2016-12-06 09:39:04
    今天开始node来开始开发微信公众平台,第一个遇到的难题就是如何才能在接口上配置成功服务器地址,刚开始看视频的时候,老师讲的是在本地链接,然后tunnel来代理,为好多小伙伴没有域名和服务器解决了个难题,...

    今天开始用node来开始开发微信公众平台,第一个遇到的难题就是如何才能在接口上配置成功服务器地址,刚开始看视频的时候,老师讲的是在本地链接,然后用tunnel来代理,为好多小伙伴没有域名和服务器解决了个难题,凑巧的是我有服务器和域名,但是不幸的是我的服务器有一个已经上线的产品,这个产品当时是用php写的,当然用的是apache和mysql搭建的是LAMP环境,这下服务器的问题解决了,但是又有一个难题就是,想要连通微信服务器,它只接受80端口,这可怎么办,总不能把原来上线的产品下了之后再重新搭建node环境吧,这样做不对,也是不可行,后来我又想,要不再找个服务器,这样不就省好多事儿了么,找了半天也没找到,突然我灵机一动,不是说github相当于一个免费的服务器么,虽然说他只能存静态文件但是我可以再找一个类似tunnal的代理,然后就开始了一段重修git命令的旅程,(因为git每次长时间不用,那些命令就会忘得一干二净),然后就又开始折腾git,从重新建一个仓库,来添加代码,这时候本来想的是先把npm下载的包放到上面,不巧,才发现原来在网页上的github上传文件有限制,被限制在100个以内,妈的,这下捷径是走不通了,还是老老实实从git网上传项目吧,这又是一堆坑,(以前用的时候只是简单命令上传)这次不知道弄得时间长了头蒙还是怎么的,反正又是一顿折腾。

    下面先说说我今天折腾git遇到的坑。

    1. 因为时间太长导致忘了我以前的git文件夹在哪儿放的,所以得重新初始化git

    2. 之后就是往暂存区添加本地的文件,这一步还好没出差错,commit 到时遇到点小问题,不过报错直接提醒了,我往上传的是文件夹所以后面要跟一个选项-f,这样才可以。

    3. 接下来就是push了,这儿就遇到个问题了,穿文件夹死活传不上去,英文报错开始没仔细看,也没看出是什么毛病,反正感觉没什么不对的就是死活传不上去,后来实在没办法了,认认真真的读了遍报错,他说是没有在本地pull,所以不让传,没办法只能先pull了一遍,这次终于传上去了(以后一定要记着这个坑,要不就先把修改统一存在暂存区中,要不就每次传完之后都得pull一次)。这下基本上把git的坑填的差不多了,本来想着再链接代理域名就好了,谁知道不能用了。。。。然后,又继续折腾git了,查了一些资料,终于还是放弃了,git确实是只能传静态文件,想要配置node服务器是不可能了,就这样又白折腾俩小时。

    然后又从网上找大神看他们遇到过这么蛋疼的事没,说不定他们不和我一样,也是80端口已经被其他人占用了,不管了,只能死马当活马医了,没想到还真的找到了,用apache反向代理服务器就好,就这样又开始配置Apache的代理服务器。

    接下来就说说这次又遇到的坑。

    按照教程说的配置完服务器,突然发现整个服务器都gg了。。。吓得我赶快又把改过的服务器配置弄了回来,还好没出什么大事儿。后来又是一顿查资料,基本上知道配置文件里面的虚拟主机又是什么鬼东西了。原来是需要重新再配置一下虚拟主机,而不是在原来的配置上面加配置,接下来又一个问题是servername又是什么鬼?还有别名又是什么。。。接下来又慢慢搞servername是什么,(原来就是你再找个域名解析过来就行,然后配置好),这基本上没什么问题了,但是从网页上走了一边发现还是不行,说是服务器出问题。现在想死的心都有了。后来以为是解析服务器还没反应过来,就闲着无聊先在命令行里面跑跑,然后就把监听端口打开了,然后一不小心就这样成了,这下长教训了,服务器跑不通原来是相应的监听端口没有打开,这个一定要记着,先打开监听端口在弄别的,要不然就会白白浪费好多时间。

    下面我们就看看apache的环境配置吧!

    1. 首先,在 Apache 的配置文件中,打开 mod_proxy 和 mod_proxy_http 至于其他的自己看着打开就好,例如需要 FTP 的话就打开相应的 FTP 选项。即:去掉 httpd.conf 中的
      LoadModule proxy_module modules/mod_proxy.so
      LoadModule proxy_http_module modules/mod_proxy_http.so

      这两行前面的 # 号即可。(在apache配置文件中有好多这种代理模块,我们这儿打开两个就OK,如果你有其他需求可以打开其他的)。

    2. 配置虚拟主机,增加下面的代码:

    <VirtualHost *:80>
          ServerName giggle.online
          ServerAlias www.giggle.online
    
          ProxyRequests off
    
          <Proxy *>
            Order deny,allow
            Allow from all
          </Proxy>
    
          <Location />
            ProxyPass http://localhost:8080/
            ProxyPassReverse http://localhost:8080/
          </Location>
        </VirtualHost>

    此处 giggle.online 和 www.giggle.online 为绑定的要访问 Node 服务的域名。(这里需要你有一个新域名(giggle.online),然后过去解析到你的服务器上)http://localhost:8080/ 为服务器上访问 Node 的网址和端口号,这里以 8080 为例。

    接下来打开你的 Node 服务(这里一定要先打开服务,我就是在这儿被坑的),然后重启 Apache ,访问 node.js 这时候你就可以看到用 Node 提供服务的网站了。

    上面这些配置其实往简单的说就是配置一下反向代理,但是因为以前没有弄过,再加上基础不好所以弄得这么费劲。希望的这篇博客对同样有问题的你是有帮助的。有不是太懂得可以私信我,共同学习。

    展开全文
  • 5个目标文件,演示Address EJB的实现 ,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,client的getHome()函数调用Home接口...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,client的getHome()函数调用Home接口...
  • 前后端分离:脱离后端语言,只写html,就像是在写一个静态站,与服务器的交互全部走ajax SPA:在前后端分离的基础上更进一步,借助gulp、webpack等构件工具将项目打包成单页应用的一种方式 本模板 正是采用的第2种...
  • 然后这几个页面是fragment的,共用一个宿主activity,那么在做组件化的时候,我想把它按照业务拆分成首页,发现,购物车和我的四个独立的业务模块。 遇到疑问: 如果是拆分成四个独立的业务模块,那么对应的...
  • C/C++手工别写一个存根例程是个十分痛苦的差使,尤其当远程方法的参数中包含特定的数据结构(如:记录、数组  、图等)时。幸运的是,gSOAP包中的'wsdl2h'WSDL解析器和'soapcpp2’存根及架构编译器能够将web服务...
  • 提供了一个对UNIX网络套接字的可移植接口,包括TCP/IP、 UDP域名解析和UNIX域套接字 os 为操作系统功能实现了一个平台无关的接口 path 实现了对斜线分割的文件名路径的操作 reflect 实现了运行时反射,允许...
  • 1,smtp2.zip 发送邮件 with attachment(76KB)<END><br>2,dial.exe TAPI拨号程序(26KB)<END><br>3,tapi.zip TAPI通信实例(63KB)<END><br>4,dumpsome.zip 演示如何用MFC和DAO(数据访问对象)写一个CGI扩展...
  • PostgreSQL必备参考手册--详细书签版

    热门讨论 2013-02-04 13:28:35
    创建一个数组 138 使用数组字段 138 多维数组 139 扩展数组 139 5.2 继承 140 5.3 PostgreSQL索引 141 B-Tree索引 141 R-Tree索引 142 散列索引 142 其他索引主题 142 5.4 OID 143 5.5 多版本并发...
  • 这个时候开发一个网页也很容易,主要就是通过 JSP、PHP 等技术一些动态模板,然后通过 Web Server 将模板解析成一个个 HTML 文件,浏览器只负责渲染这些 HTML 文件。这个阶段还没有前后端的分工...
  • 15.3.2 Oracle调用接口驱动程序或中间层胖驱动程序 470 15.3.3 Oracle 服务器端内部驱动程序或服务器层胖驱动程序 470 15.4 在Oracle中创建Java类库 471 15.4.1 构建内部服务器Java函数 472 15.4.2 创建内部...
  • 15.3.2 Oracle调用接口驱动程序或中间层胖驱动程序 470 15.3.3 Oracle 服务器端内部驱动程序或服务器层胖驱动程序 470 15.4 在Oracle中创建Java类库 471 15.4.1 构建内部服务器Java函数 472 15.4.2 创建内部...
  • true) // NOTE: 设置一个空的应答签名验证器,**不要**在业务请求 .build(); 注意:业务请求请使用标准的初始化流程,务必验证应答签名。 如何下载账单 因为下载的账单文件可能会很大,为了平衡系统性能和签名...
  • 再次双击标题栏最大化,再次双击还原,相当于子模块也可以全屏显示作为一个大屏,这样就可以一个大屏拓展出多个子大屏,放大查看子模块的数据详情。 每个模块都可以自定义采集速度,如果是数据库采集会自动排队处理...
  • 、列表中的[权限],指的是对某一个用户进行独立设计权限,他的权限不受等级组权限管理,可以自定义设置用户权限。 、列表中的[最后IP],点击该用户最后登录的IP可以限制该IP的访问,请谨慎。 2、用户组...
  • 延迟对象 延迟对象(Deferred Object,jQuery.Deferred对象)是一个可链接的(chainable)实用工具对象,实现了Promise接口,可以在回调队列中注册多个回调、调用回调队列并转发任何同步/异步函数的成败状态。...
  • INT:中间代码,当一个源程序经过语法检查后编译产生一个可执行代码 IOF:Findit文档 IQY:Microsoft Internet查询文件 ISO:根据ISD 9660有关CD-ROM文件系统标准列出CD-ROM上的文件 ISP:X-Internet签字文件 ...

空空如也

空空如也

1 2 3
收藏数 46
精华内容 18
关键字:

如何用php写一个本地接口