1 |
|
可矫正所有 图片格式包括 png jpg tif等
此心用度八千遍,不曾厌倦
1 |
|
可矫正所有 图片格式包括 png jpg tif等
随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了。近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信,扩展了浏览器与服务端的通信功能,使服务端也能主动向客户端发送数据。
我们知道,传统的HTTP协议是无状态的,每次请求(request)都要由客户端(如 浏览器)主动发起,服务端进行处理后返回response结果,而服务端很难主动向客户端发送数据;这种客户端是主动方,服务端是被动方的传统Web模式 对于信息变化不频繁的Web应用来说造成的麻烦较小,而对于涉及实时信息的Web应用却带来了很大的不便,如带有即时通信、实时数据、订阅推送等功能的应 用。在WebSocket规范提出之前,开发人员若要实现这些实时性较强的功能,经常会使用折衷的解决方法:轮询(polling)和Comet技术。其实后者本质上也是一种轮询,只不过有所改进。
轮询是最原始的实现实时Web应用的解决方案。轮询技术要求客户端以设定的时间间隔周期性地向服务端发送请求,频繁地查询是否有新的数据改动。明显地,这种方法会导致过多不必要的请求,浪费流量和服务器资源。
Comet技术又可以分为长轮询和流技术。长轮询改进了上述的轮询技术,减小了无用的请求。它会为某些数据设定过期时间,当数据过期后才会向服务端发送请求;这种机制适合数据的改动不是特别频繁的情况。流技术通常是指客户端使用一个隐藏的窗口与服务端建立一个HTTP长连接,服务端会不断更新连接状态以保持HTTP长连接存活;这样的话,服务端就可以通过这条长连接主动将数据发送给客户端;流技术在大并发环境下,可能会考验到服务端的性能。
这两种技术都是基于请求-应答模式,都不算是真正意义上的实时技术;它们的每一次请求、应答,都浪费了一定流量在相同的头部信息上,并且开发复杂度也较大。
伴随着HTML5推出的WebSocket,真正实现了Web的实时通信,使B/S模式具备了C/S模式的实时通信能力。WebSocket的工作流程是这 样的:浏览器通过JavaScript向服务端发出建立WebSocket连接的请求,在WebSocket连接建立成功后,客户端和服务端就可以通过 TCP连接传输数据。因为WebSocket连接本质上是TCP连接,不需要每次传输都带上重复的头部数据,所以它的数据传输量比轮询和Comet技术小 了很多。本文不详细地介绍WebSocket规范,主要介绍下WebSocket在Java Web中的实现。
JavaEE 7中出了JSR-356:Java API for WebSocket规范。不少Web容器,如Tomcat,Nginx,Jetty等都支持WebSocket。Tomcat从7.0.27开始支持 WebSocket,从7.0.47开始支持JSR-356,下面的Demo代码也是需要部署在Tomcat7.0.47以上的版本才能运行。
在pom.xml中添加Jar包依赖
1 | 1 <dependency> |
客户端(Web主页)代码:
1 | 1 <%@ page language="java" pageEncoding="UTF-8" %> |
Java Web后端代码
1 | 1 package me.gacl.websocket; |
同时打开Google浏览器和火狐浏览器进行多客户端模拟测试,运行效果如下:
该Demo在Jdk1.7+Tomcat7.0.65下环境测试过,示例项目代码下载
本篇博客的大部分内容转载自http://blog.chenzuhuang.com/archive/28.html,然后在此基础上进行完善,在此对作者表示感谢.
在执行完以上代码后,我们就成功地创建了一个消息框实例,在Chrome下面它最终会显示成这样:
到这里我们已经成功了一半,但能不能正确地显示出这个消息框,最终还取决于用户的授权。鉴于浏览器的安全机制,只有用户同意网页弹出消息通知框,消息通知才能够真正的显示出来。所以现在我们要做的就是申请用户授权。
Notification类提供了一个requestPermission方法,用来请求用户授权,代码如下:
1 | Notification.requestPermission(function (permission) { |
温馨提示:用户一旦没有授权,拒绝,以上方法将不再执行!
1 | <!DOCTYPE html> |
编写sh脚本如下:
1 |
|
然后通过下面命令将脚步加入系统的计划任务
1
2
3
crontab -e
0 2 * * * cd /usr/sbin/ && ./bakmysql.sh
保存退出以后就可以了。
也许需要重启crontab 启用命令:/sbin/service crond restart
后期更改~结果如下
fdisk-l
查看硬盘信息可以看到有两块硬盘/dev/vda
和/dev/vdb
,启动vda是系统盘vdb是我们新增的数据盘。
2.执行以下命令,进入fdisk模式,开始对新增数据盘执行分区操作。
fdisk 新增数据盘
以新挂载的数据盘“/dev/xvdb”为例:
fdisk /dev/xvdb
回显类似如下信息:
3.输入“n”,按“Enter”,开始新建分区。
回显类似如下信息:
表示磁盘有两种分区类型:
4.以创建一个主要分区为例,输入“p”,按“Enter”,开始创建一个主分区。
回显类似如下信息:
“Partition number”表示主分区编号,可以选择1-4。
5.以分区编号选择“1”为例,输入主分区编号“1”,按“Enter”。
回显类似如下信息
“First sector”表示初始磁柱区域,可以选择2048-20971519,默认为2048。
6.以选择默认初始磁柱编号2048为例,按“Enter”。
回显类似如下信息:
“Last sector”表示截止磁柱区域,可以选择2048-104857599,默认为104857599。
7.以选择默认截止磁柱编号2104857599为例,按“Enter”。
回显类似如下信息:
表示分区完成,即为50GB的数据盘新建了1个分区。
8.输入“p”,按“Enter”,查看新建分区的详细信息。
回显类似如下信息:
表示新建分区“/dev/vdb1”的详细信息。
9.输入“w”,按“Enter”,将分区结果写入分区表中。
回显类似如下信息:
表示分区创建完成。
10.执行以下命令,将新的分区表变更同步至操作系统。
partprobe
11.执行以下命令,将新建分区文件系统设为系统所需格式。
mkfs -t 文件系统格式 /dev/vdb1
以设置文件系统为“ext4”为例:
mkfs -t ext4 /dev/vdb1
回显类似如下信息:
格式化需要等待一段时间,请观察系统运行状态,不要退出。
12.执行以下命令,新建挂载点。
mkdir 挂载点
以新建挂载点“/XC”为例:
mkdir /XC
13.执行以下命令,将新建分区挂载到12中新建的挂载点下。
mount /dev/vdb1 挂载点
以挂载新建分区至“/XC”为例:
mount /dev/vdb1 /XC
14.执行以下命令,查看挂载结果。
df -TH
回显类似如下信息:
表示新建分区“/dev/vdb1”已挂载至“/XC”。
如果您需要在云服务器系统启动时自动挂载磁盘,不能采用在 /etc/fstab直接指定 /dev/xvdb1的方法,因为云中设备的顺序编码在关闭或者开启云服务器过程中可能发生改变,例如/dev/xvdb1可能会变成/dev/xvdb2。推荐使用UUID来配置自动挂载数据盘。
说明:磁盘的UUID(universally unique identifier)是Linux系统为存储设备提供的唯一的标识字符串。
1.执行如下命令,查询磁盘分区的UUID。
blkid 磁盘分区
以查询磁盘分区“/dev/vdb1”的UUID为例:
blkid /dev/vdb1
回显类似如下信息:
表示“/dev/vdb1”的UUID。
2.通过vim编辑`/etc/fstab
在末尾增加一行
UUID=f5c5c392-4704-4475-9abc-f6a2e049f2ea /XC ext4 defaults 0 2
保存
3.重启服务器
通过命令df -TH
查看磁盘信息
可以看出已经自动挂载了。
开机自动挂载磁盘错误,将会造成无法开机,解决方法,通过单用户模式进入系统,修改挂载配置
vnc单用户模式进入 https://www.west.cn/faq/list.asp?unid=756
更改开机自动挂载磁盘配置 https://wenku.baidu.com/view/58c7e1f0f61fb7360b4c6503.html
tail -f file-path
命令就可以实时查看到日志文件的输出。当有负载的需要,服务器多了之后,就会比较麻烦,为了查找一个问题的日志可能需要登录多台服务器。今天给大家介绍一种借助sshfs,非常简单的日志文件挂载方案,可以方便大家查看服务器日志文件。1 |
|
mount -l
1
2
3
4
5
6
7
8
9
可以看到挂载的情况:
<pre class="hljs ruby"><code class="ruby">root@ip_address_A<span class="hljs-symbol">:/mydata/logs/on /mydata/logs/A type fuse.sshfs (rw,nosuid,nodev)
root@ip_address_B<span class="hljs-symbol">:/mydata/logs/on /mydata/logs/B type fuse.sshfs (rw,nosuid,nodev)
root@ip_address_C<span class="hljs-symbol">:/mydata/logs/on /mydata/logs/C type fuse.sshfs (rw,nosuid,nodev)
</span></span></span></code>
也可以使用df -h
命令查看磁盘的挂载情况。另外,想要开机自动挂载目录,可以编辑/etc/fstab
文件,加入以下几行:
sshfs#root@ip_address_A:/mydata/logs/ /mydata/logs/A fuse defaults,auto,allow_other 0 0
sshfs#root@ip_address_B:/mydata/logs/ /mydata/logs/B fuse defaults,auto,allow_other 0 0
sshfs#root@ip_address_C:/mydata/logs/ /mydata/logs/C fuse defaults,auto,allow_other 0 0
1
2
3
4
5
6
7
其中,`allow_other`参数代表该设置对其他用户也生效。也必须先把ssh自动登录配置好了,让root用户能够使用root身份登录远程主机。配置方法参见我之前的[文章](https://link.jianshu.com?t=http://www.hello1010.com/linux_scp)。
挂载成功后,就可以在服务器D直接查看所有服务器的日志了,在D服务器的`/mydata/logs/`目录输入以下命令。(假设A、B、C三台服务器的`/mydata/logs/`目录下都有log.txt这个文件)
<pre class="hljs cpp"><code class="cpp">tail -f */<span class="hljs-built_in">log.txt
</span></code>
日志的输出中,会标出日志是在哪台服务器的,例如:
==> A/log.txt <==
get log message from A
1
2
3
4
5
假如只想查看日志中包含关键字 `a b c`的日志,可以这样查看
<pre class="hljs bash"><code class="bash"> tail -f */log.txt | grep <span class="hljs-string">'a b c'
</span></code>
日志的输出会有一定的延时。
需要注意的是,取消挂载时,不要直接删除挂载目录,请使用以下命令取消挂载:
fusermount -u /mydata/logs/A
`
或者直接使用umount
命令取消挂载。
作者:hellojammyPlus
链接:https://www.jianshu.com/p/cdf5652a88d3
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
如果手动去一个个找依赖是很困难的,即便已经知道名字、版本,下面就依赖系统自带的命令完成该步骤
以java为例,其他安装包只要替换包名
1 | yum install --downloadonly --downloaddir=/home/java java |
安装sshfs
官方下载地址 https://github.com/libfuse/sshfs/releases
首先,我们需要安装sshfs软件。sshfs是一个基于SSH文件传输协议的文件系统客户端,它的官方网页是:http://fuse.sourceforge.net/sshfs.html 。在CentOS下,我们可以通过yum来安装(注意使用yum安装需要安装EPEL源):
yum -y install fuse-sshfs
安装好后,系统会自动建立fuse用户组,要使用sshfs的用户只要加入这个用户组即可。
挂载远程目录
要想挂载远程目录,使用如下命令即可:
sshfs user@hostname:path mout_point
例如:sshfs root@127.0. 0. 0:/data/www/rabbit/Upload/ /mnt/file_server_storage
/mnt/file_server_storage为本地的路径
这里user为远程主机用户名,hostname为远程主机IP地址,path为远程主机中想要挂载到本地的目录,mount_point为挂载到本地的目录。
卸载挂载点
当不需要使用的时候,使用以下命令卸载:
fusermount -u mount_point
如果想要开机自动挂载,可以在/etc/fstab中加入下面一行:
sshfs#user@hostname:path mount_point fuse defaults,auto,allow_other 0 0
这就要求必须先把ssh自动登录配置好了,让root用户能够使用user身份登录远程主机,另外allow_other这个参数很重要,没有这个参数的话,挂载过来的目录只有root能够访问。
以下为实际操作中所遇到的问题
1、执行卸载命令:
fusermount -u /mnt/file_server_storage
提示device is busy.
执行: umount -fl ./file_server_storage 命令可以完成卸载.
关于: umount 命令
umount可卸除目前挂在Linux目录中的文件系统
2、关于操作操作权限
以前经常出现执行挂载命令以后,shell命令可以直接进入挂载点操作,但远程程序一直无法操作成功。
后来发现是需要加上-o 参数:
执行sshfs –h 会看到如下帮助说明
FUSE options:
FUSE(用户空间文件系统)
用户空间文件系统(Filesystem in Userspace),是Linux 中用于挂载某些网络空间,如SSH,到本地文件系统的模块,在SourceForge上可以找到相关内容。
sshfs root@127.0. 0. 0:/data/www/rabbit/Upload/ /mnt/file_server_storage
//替换为以下命令即可
sshfs root@127.0. 0. 0:/data/www/rabbit/Upload/ /mnt/file_server_storage –o allow_other
配合的在/etc下面增加了一个文件fuse.conf
在fuse.conf里面就一句话: user_allow_other,保存退出即可。