日期: 2021 年 4 月 7 日

idc 托管 vs ucloud 物理云主机

我对这方面基本属于完全不懂…只是大概了解了一下,

idc 托管: 10m 4-9k/month

ucloud 物理主机: (32 核 /64g/480g*6)+10m 大概 5225/month

托管有什么我不知道的好处?没有的话,这 ucloud 性价比碾压啊… 省很多事儿还不贵…

esile 1
esile 2017-08-03 02:05:58 +08:00 via iPhone
差别二手服务器搞一台,托管特别实惠
misty8873 2
misty8873 2017-08-03 02:08:12 +08:00 via iPad
如果是北京 bgp 的话,我有信息可以做到价格合适,因为我做 idc 的
thinkxen 3
thinkxen 2017-08-03 11:44:39 +08:00 ❤️ 1
自己买一台服务器,然后托管*实惠~~~
10M BGP 带宽不要北上广的话,可以做到 1500-2000 差不多可以~~~
wangzhangwei 4
wangzhangwei 2017-08-03 12:16:38 +08:00 ❤️ 1
托管:
1、企业独享硬件资源,性能好,云是共享资源平台
2、安全性高,全部数据在自己的物理机上,不会被云厂商抓取数据
3、可控性强,如果出问题,可随时进入机房处理,而云出问题只能云厂商处理。

云主机:*大的特点是弹性扩容和维护方便,至于价格,少量代配云主机成本是比较低的,如果量大之后云主机成本和托管是差不多,有的会比托管贵(有的企业自己买高配物理服务器自己做虚拟化)。

有的 IDC 厂商也提供混合云,机房提供服务器托管服务,然后在同一个机房提供云主机服务,通过光纤打通云主机和托管服务器内网,这样对数据敏感的可以用托管,新项目、WEB 站可以放在云平台上。
hahaDashen 5
hahaDashen 2017-08-03 19:40:03 +08:00 ❤️ 1
IDC 托管:16 核心 32G 1Thdd 100M 1k/mo
hahaDashen 6
hahaDashen 2017-08-03 19:40:43 +08:00
这些云服务商的价格还是贵 但是可能服务上要更细致到位一点
QQ2171775959 7
QQ2171775959 2017-08-04 14:10:04 +08:00
托管费用比租用便宜,长期用的比较划算,具体的可以聊聊。
tedchen 8
tedchen 2017-08-04 14:56:09 +08:00
@hahaDashen 我这儿调研了一下,北京的机房托管+10m 流量大概每个月 2.4k. 你这个 1k 是哪儿的呀请问
tedchen 9
tedchen 2017-08-04 14:59:53 +08:00
@wangzhangwei 调研了一下,我这边就 4-6 台,买服务器+托管的话感觉可能还是云划算一点哈哈。
wangzhangwei 10
wangzhangwei 2017-08-04 15:38:42 +08:00
@tedchen 如果物理机器 不做虚拟化,成本要比云方案高的。
@hahaDashen 您这个估计是 100M 共享带宽的费用吧。

wangzhangwei 11
wangzhangwei 2017-08-04 15:42:13 +08:00
@tedchen 还是要强调一些,创业初期,云主机数量和带宽较少,成本是比较低,但随着用户量上升,云成本和托管的成本差不多,甚至比托管还要贵。用云*主要的是弹性好,维护方便,也是未来的一个趋势。
hahaDashen 12
hahaDashen 2017-08-04 21:06:18 +08:00
@tedchen
@wangzhangwei
百兆独享 绍兴的
wangzhangwei 13
wangzhangwei 2017-08-07 09:49:18 +08:00
@hahaDashen 绍兴是单线的,而且地方也有点偏啊
hahaDashen 14
hahaDashen 2017-08-07 12:14:20 +08:00
@wangzhangwei 镇江之类的这个价格都能搞到 要三线的百兆价格也不超过 2K 三个 IP 电信 联通 移动
wintab 15
wintab 2017-08-15 14:49:37 +08:00 ❤️ 1
睿江云 eflycloud.com 大概 3650/月 BGP 带宽,多个节点可选择。。
togodo 16
togodo 2017-09-13 22:26:34 +08:00
如果对性能要求多,而且系统不是云架构,那么*对选择托管啊

Android命名规范

Android命名规范(重点讲解:包名)

Android程序开发中,使用规范的命名有益于程序的开发和后期阅读。本文主要对Android程序包名的定义做详细介绍,并附带一些简单的命名规则。

一.标识符命名方法
1 .小驼峰命名法,除首单词外,其余所有单词的*个字母大写。如:allPrice,getAllNames
2.大驼峰命名法,所有单词的*个字母大写。如:GuideActivity,StudentInfoBean
3.下划线命名法:单词与单词间用下划线做间隔。如:activity_main,select_backGround_color
二.命名规范
(一)包(packages)的命名规范:
采用反域名命名规则,全部使用小写字母。一级包名为com,二级包名lwz(为个人或公司名称,可以简写),三级包名guidecity(根据应用进行命名),四级包名ui或utils等(模块名或层级名),根据实际情况也是可以用五级包名,六级包名。
这里的四级包名是要重点理解和分类的,例如:com.lwz.应用.utils ,此包中包含:公共工具方法类

1.utils
此包中包含:公共工具方法类,比如:SPHelperUtil、TimeUitl、FileUtil等

2.adapter
此包中包含:一些适配器的类,比如:ArticleAdapter、FansAdapter,HistorAdaper等

3.base
此包中包含:一些共同类的基类,比如:BaseActivity(所有的Activity类都继承这个类)、BaseFragment(所有的Fragment都继承这个类),ListItemAdapter(封装了Base Adapter的基类)等

4.bean
此包中包含:一些属性对象类,比如:StudentBean、LonginBean、ArticleBean等

5.config
此包中包含:*顶级的配置类,比如:MyApp(继承了Application)

6.httpservice
此包中包含:Http数据的请求接口类,好像Retrofit网络框架请求网络数据才要使用。如:ILogin接口,IAddTopic接口,IUpdate等

7.interface
此包中包含:某个页面或对象的所用操作接口类,这个接口主要是定义这个对象的所有方法。如:IUser接口,IArticle接口,ITopic接口等

8.model
这是MVC或MVP框架设计中的M。此包中包含:某个页面或对象的所用操作类,这个类继承了上面定义的interface接口,重写并实现厘米那的方法。如:UserModel,ArticleMode类,TopicMode类等

9.ui
这个ui表示的页面的意思,也是MVC或MVP中的V,很多人把这个包名写成activity,其实是不准确的,因为ui包含了activity和fragment,所以ui是四级包名,而activity和fragment是ui包下的五级包名。
activity此包中包含:Activity对象类。如:MainActivity类,HomeActivity类,FansListActivity类等。如果是使用了MVP框架模式,activity包名下还可以有六级包名,比如:loginMVP(包含ILoginView接口类,LoginPresenter类)、seleteTopicMVP
fragment此包中包含:Fragment对象类。但是Fragment一般都是多个存在的,所以fragment包下一般还有六级包名,表示里面是哪个页面的Fragment对象。

10.weight
此包中包含:自定义View或自定义对话框等视图类。如:CursroDialog类,SpringScrollView类,ScrollListView类等

11.db
此包中包含:数据库操作类

12.service
此包中包含:Service服务类

13.broadcast
此包中包含:Broadcast广播接收者类

14.provider
此包中包含:Provider内容提供者类(用得很少)

包名规划我感觉对程序后期阅读或修改有很大的帮助,特别是很大的程序,文件太多,不规划的话自己都不知道这个类是干什么的!
当然如果程序中没有这一类的文件,这个包名是可以不写,但是一些基本的包名,基本每个程序都是需要的比如:ui、utils、adapter、weight、bean等

(二)类(classes)的命名规范:
一般用名词,采用大驼峰命名法,尽量避免缩写,除非该缩写是众所周知的,比如HTML,URL,如果类名称中包含单词缩写,则单词缩写的每个字母均应大写。

以下是部分示例说明:
1.activity 类,如欢迎页面类WelcomeActivity.
2.adapter类,如商品详情适配器ProductDetailAdapter
3.util公共方法类,如:线程池管理类:ThreadPoolManager,日志工具类:LogUtil
4.db数据库类,以DBHelper后缀标识。如城市数据库:CityDBHelper
5.Service类,以Service为后缀标识
6.BroadcastReceive,以Broadcast为后缀标识
7.ContentProvider,以Provider为后缀标识

(三)接口(interface):
命名规则与类一样采用大驼峰命名法,多以able或ible结尾或以I开头,如Runnable、Accessible、IUser。

(四)方法(methods)的命名规则:
一般使用动词或动名词,采用小驼峰命名法 例如:onCreate(),run()

>1.initXXX()初始化相关方法,使用init为前缀标识
2.isXXX()、checkXXX() 方法返回值为boolean型的请使用is或check为前缀标识
3.getXXX()返回某个值的方法,使用get为前缀标识
4.processXXX() 对数据进行处理的方法,尽量使用process为前缀标识
5.displayXXX() 弹出提示框和提示信息,使用display为前缀标识
6.saveXXX() 与保存数据相关的,使用sav为e前缀标识
7.resetXXX() 对数据重组的,使用reset前缀标识
8.clearXXX()removeXXX() 清除数据相关的,使用clear或remove为前缀标识
9.drawXXX() 绘制数据或效果相关的,使用draw前缀标识

(五)变量(variables)采用小驼峰命名法。类中控件名称一般与xml布局id保持一致
(六)常量(constants)全部大写,采用下划线命名法.例如:MIN_WIDTH
(七)XML文件(布局文件):全部小写,采用下划线命名法,
例如:main_activity.xml, item_activity.xml、homeposter_item_poster.xml

(八)资源文件(图片): 全部小写,采用下划线命名法,加前缀区分
命名 说明

%title插图%num

(九)动画文件(anim包):全部小写,采用下划线命名法,加前缀区分。
动画命名例子:

%title插图%num

(十)资源ID(resources id):大小写规范与方法名一致,采用小驼峰命名法。
命名规范为“资源控件的缩写名”+“变量名”。例如TextView的id=“tv_userName”。注意:页面控件名称应该和控件id名一般是一致,例如:TextView tv_userName=(TextView)findViewById(R.id.tv_userName);

三.图解包名规范示例
本文主要是想对程序包名的命名规划,这里展示我之前开发的程序的包名图片,供大家参考:

(一)总显示

%title插图%num
上面example这个包名一般是不用的!

(二)ui包下
fragment展示
%title插图%num
activity 展示:

%title插图%num
(三)utils和weight包下

%title插图%num
(四)res文件夹下的部分文件展示:

%title插图%num
drawable包下:

%title插图%num
layout包下:

%title插图%num
上面就是一个完成程序的主要文件展示,这个程序大概有三百多个文件(包括java文件和资源文件),这里就不一一展示了!
大家可以想象一下,如果这个程序包名和文件名都没有很好规划,那么你要找你想要的几个文件是一个多么麻烦的事情!
一般地,我在创建每个java程序文件都会在上面做几句话的注解,说明一下这个文件的作用,有些布局文件也是有简单说明。这样更加有利于后期的程序代码迭代或版本更新!
命名规范是必须的吗?有些是!有些不是。比如包名、类的定义,系统没有硬性规定,但是资源文件res文件夹下的命名,系统要求资源文件名必须小写,否则,你的程序一直运行不了,你都不知道为啥。

*后说一句:程序开发中命名规范是一个很好的开发习惯!

查看安卓app包名的几种方法

包名(Package name)在Android系统中是判断一个App的唯一标识,不同的App可以有同样的名字,但是它的包名不可以相同

例如我可以自己编译生成一个App也叫“微信”,但是我App的包名不能为com.tencent.mm(微信的包名为这个),如果我指定的包名和微信一致了,那么我的手机上只允许安装这两个App中的其中一个

说到这很多人就会有疑问,如果有人恶意做了一个和微信内容一模一样的App,名字和包名都和微信一样,那怎么分辨呢?Android中为了防止这样,还做了一个叫签名的东西,微信的签名一般我们是没有的,所以就可以通过签名来标识出这款App到底是谁的了,有兴趣了可以了解下签名。

手机查看:

以小米手机为例,打开设置-更多应用-查找到此应用-点击右上角更多信息 即可查看包名

命令行查看:

%title插图%num

具体如下:

方法一:
输入命令:adb shell am monitor
然后启动需要获取包名的应用

%title插图%num

方法二:
adb shell pm list packages -3
查看自己安装的app包名

%title插图%num

方法三:
安卓系统中:设置——应用——正在运行 查看

%title插图%num

方法四:
安卓系统中:文件管理器访问目录/data/data下,文件夹即为包名

%title插图%num

方法五:
将apk包反编译后,打开AndroidManifest.xml,搜索package获取包名

%title插图%num

python推导式

python推导式

python推导式
初学python,可以评论互相交流,
# 列表推导式格式:
# 格式:[表达式 for 变量 in 旧列表] 不带条件
# [表达式 for 变量 in 旧列表 if 条件] 带条件
#将1-100之间能被3和5整除的数,组成一个新的列表
# newlist = [i for i in range(1,101) if i%3 == 0 and i%5 == 0]
# print(newlist)
# 利用0~5数字,在一个元组中前一个为偶数,后一个为奇数
#使用函数完成
# [(偶数,奇数),(),(),] [(0,1),(0,3),(0,5)…]
# def func():
# newlist = []
# for i in range(5):
# if i%2 == 0:
# for j in range(10):
# if j%2 != 0:
# newlist.append((i,j))
# return newlist
# x = func()
# print(x)
# 利用推导式完成
# newlist = [(x,y) for x in range(5) if x % 2 == 0 for y in range(10) if y % 2 != 0]
# print(newlist)
# 列表里有列表
# list1 = [[1,2,3],[4,5,6],[7,8,9],[1,3,5]]
# newlist = [i[2] for i in list1]
# print(newlist)
#含if和else的推导式
# if 薪资大于5000加200 else低于等于5000加500
# dict1 = {‘name’:’tom’,’salary’:4900}
# dict2 = {‘name’:’lucy’,’salary’:6000}
# dict3 = {‘name’:’jack’,’salary’:8000}
# dict4 = {‘name’:’lily’,’salary’:4000}
# list1 = [dict1,dict2,dict3,dict4]
# newlist = [employee[‘salary’]+200 if employee[‘salary’]>5000 else employee[‘salary’]+500 for employee in list1]
# print(newlist)

# 集合推导式 {},类似列表推导式,多加了去除重复的功能
# list1 = [1,2,3,1,3,5,2,8,9,87,78]
# set1 = {x for x in list1 if x>5 }
# print(set1)

# 字典推导式 交换键和值的值
# dic1 = {‘a’:’A’,’b’:’B’,’c’:’C’,’d’:’C’}
# newdict = {value:key for key,value in dic1.items()}
# print(newdict)

nms 算法演示(附代码)

nms 算法演示(附代码)

NMS_DEMO 动图演示
”’一共9个框,前4列是坐标(xyxy格式),*后一列是置信度”’
boxes=np.array([
[100,100,210,210,0.72],#0
[280,290,420,420,0.8],#1
[220,220,320,330,0.92],#2
[105,90,220,210,0.71],#3
[230,240,325,330,0.81],#4
[305,300,420,420,0.9],#5
[215,225,305,328,0.6],#6
[150,260,290,400,0.99],#7
[102,108,208,208,0.72]])#8

”’按置信度从高到低排序(框对应的索引)”’
order: [7 2 5 4 1 8 0 3 6]

左图是原始的框(没经过nms操作的框):
黄色填充的框是按置信度排序后,被选中保留的框

右图是nms操作后的框:
每选中保留一个框,就会计算它跟余下的框的iou,iou大于0.7(人为设置)则剔除
注意:这里余下的框是不包括之前已经确定保留的框

左图的题目keep表示保留的框的id,score表示保留的框的置信度
右图的题目keep表示保留的框的id,delete表示需要剔除的框(保留的框与其iou>0.7)%title插图%num

介绍一下步骤:
所有框按置信度从高到低进行排序:[7 2 5 4 1 8 0 3 6] (框的索引)

从置信度*高的那个框(7)开始,(7)已经保留,那么就会跟(0)~(6)、(8)剩下的8个框比较iou,iou都<0.7,全部保留

接着确定置信度排第2的框(2),(7,2)已经保留,那么就会跟(0)、(1)、(3)、(4)~(6)、(8)剩下的7个框比较iou,其中(4)、(6)iou>0.7,剔除

接着确定置信度排第3的框(5),(7,2,5)已经保留,那么就会跟(0)、(1)、(3)、(8)剩下的4个框比较iou,其中(1)iou>0.7,剔除

接着确定置信度排第4的框(8),(7,2,5,8)已经保留,那么就会跟(0)、(3)剩下的2个框比较iou,其中(0)、(3)iou>0.7,剔除

完整代码
import numpy as np
import matplotlib.pyplot as plt

def py_cpu_nms(nms_show, dets, thresh):# nms操作
“Pure Python NMS baseline”
# x1、y1、x2、y2以及score赋值
x1 = dets[:,0]
y1 = dets[:,1]
x2 = dets[:,2]
y2 = dets[:,3]
scores = dets[:, 4]

areas = (y2-y1+1) * (x2-x1+1) #每一个检测框的面积
print(“all_areas:”,areas)

order = scores.argsort()[::-1]# 按照score置信度降序排序
print(“order:”,order)

keep = [] # 保留的结果框集合
k=0
show_boxid = order
print(“show_boxid”,show_boxid)
while order.size > 0:
i = order[0] # every time the first is the biggst, and add it directly
keep.append(i) # 保留该类剩余box中得分*高的一个
print(“\nkeep(被留下来的框id):”,keep)
# 得到相交区域,比左上大和比右下小
”’np.maximum(X, Y, out=None) X和Y逐位进行比较,选择*大值”’
xx1 = np.maximum(x1[i], x1[order[1:]])
yy1 = np.maximum(y1[i], y1[order[1:]])
xx2 = np.minimum(x2[i], x2[order[1:]])
yy2 = np.minimum(y2[i], y2[order[1:]])
print(“xx1,yy1:”,xx1,yy1)
print(“xx2,yy2:”,xx2,yy2)
print(“w,h:”,xx2-xx1+1,yy2-yy1+1)
#plt.scatter([xx1,xx2], [yy1,yy2], s=50, c=’y’)#框左上角蓝色

# 计算相交的面积,不重叠时面积为0
w = np.maximum(0, xx2-xx1+1) # the weights of overlap
h = np.maximum(0, yy2-yy1+1) # the height of overlap
inter = w*h
print(“w*h:”,inter)
# 计算IoU:重叠面积 /(面积1+面积2-重叠面积)
iou = inter / (areas[i]+areas[order[1:]] – inter)
print(“—iou:”,iou)
# 保留IoU小于阈值的box
”’去掉keep剩下的框按顺序重新排序”’
indx = np.where(iou<=thresh)[0]
dedx = np.where(iou>thresh)[0]
print(“order[0]:”,order[0])
show_boxid = np.delete(show_boxid,np.where(show_boxid==order[0])[0],axis = 0)
print(“show_boxid:”,np.append(keep,show_boxid))
delete_boxid = show_boxid[dedx]
show_boxid = show_boxid[indx]
#print(“indx:”,indx)
print(“after_iou_show_boxid:”,np.append(keep,show_boxid))
print(“after_iou_delete_boxid:”,delete_boxid,’\n’)
k=k+1
”’绘制动图”’
ax1 = nms_show.add_subplot(1,2,1)
ax1.set_title(‘begin_nms {} \nkeep:{} score:{}({})’.format(k,order[0],scores[order[0]],k))
plot_bbox(dets, ‘k’, show_ids=np.arange(9) , keep_id = order[0])

ax2 = nms_show.add_subplot(1,2,2)
ax2.set_title(‘after_nms {} \nkeep:{} delete:{}(iou={})’.format(k,order[0],delete_boxid,iou[dedx]))
plot_bbox(dets[np.append(show_boxid,keep)], ‘b’, np.append(show_boxid,keep))
plt.pause(5)
ax1.remove()
ax2.remove()
”’置信度排前的数值给取出,剩下的数构成新的数组”’
order = order[indx+1]
print(“———–afer_order:”,order,’———–‘)
return keep

def plot_bbox(dets, c=’k’, show_ids=[],keep_id=0):
x1 = dets[:,0]
y1 = dets[:,1]
x2 = dets[:,2]
y2 = dets[:,3]
score=dets[:,4]
#print(dets.shape)
#plt.scatter(x1, y1, s=25, c=’b’, alpha=0.6)#框左上角蓝色
#plt.scatter(x2, y2, s=25, c=’r’, alpha=0.6)#框右下角红色
plt.plot([x1,x2], [y1,y1], c)
plt.plot([x1,x1], [y1,y2], c)
plt.plot([x1,x2], [y2,y2], c)
plt.plot([x2,x2], [y1,y2], c)
plt.xlim((60,450))
plt.ylim((450,60))
”’改变坐标轴位置”’
ax = plt.gca()
ax.spines[“top”].set_color(“k”)
ax.xaxis.set_ticks_position(“top”)

for i in range(len(show_ids)):
plt.text(x1[i], y1[i]+7, “(%d)%.2f”%(show_ids[i],score[i]), \
fontdict={‘size’: 10, ‘color’: ‘r’},bbox={‘facecolor’:’blue’, ‘alpha’:0.1})
if keep_id != 0:
ax.add_patch(plt.Rectangle((x1[keep_id], y1[keep_id]), x2[keep_id]-x1[keep_id]+1, y2[keep_id]-y1[keep_id]+1,
color=”y”, fill=True, linewidth=2))

def main():
boxes=np.array([
[100,100,210,210,0.72],#0
[280,290,420,420,0.8],#1
[220,220,320,330,0.92],#2
[105,90,220,210,0.71],#3
[230,240,325,330,0.81],#4
[305,300,420,420,0.9],#5
[215,225,305,328,0.6],#6
[150,260,290,400,0.99],#7
[102,108,208,208,0.72]])#8 #9个框

plt.ion()
fig = plt.figure(figsize=[14,9])
ax1 = plt.subplot(1,2,1)
ax1.set_title(‘before_nms’)

ax2 = plt.subplot(1,2,2)
ax2.set_title(‘after_nms’)

plt.sca(ax1)# 选择子图1
plot_bbox(boxes,’k’,show_ids=np.arange(9),keep_id=0) # before nms

keep = py_cpu_nms(fig, boxes, thresh=0.7)
print(“last_keep:”,keep)
plt.ioff()
plt.pause(2)
plt.close(‘all’)

if __name__ ==”__main__”:
main()

java服务器开发

java服务器开发基础篇-从零开始
这里记录了*初期的基本开发步骤。
推荐一个免费视频课程:http://study.163.com/course/courseMain.htm?courseId=1005265066,讲的非常详细。

1、创建一个基础工程
见:https://www.cnblogs.com/sweeeper/p/5488215.html
创建的工程中目录结构:

src: 源代码目录,在这个目录下写代码
JRE System Library: java系统库目录,一般不用管
Java EE * Libraries: javaweb库目录,一般不用管
WebRoot: 发布后服务器根目录。当项目部署时这个文件夹会以工程名称命名的文件夹形式出现在服务器中。并且src中的代码会编译为二进制文件保存在这个目录下的WEB-INF/classes中。而在开发过程中需要的资源文件也会以工程中的目录结构存在于这个目录下。
2、创建servlet
直接创建servlet,xml文件会自动配置

3、要点记录
get请求下。可从request中获取,URL,URI,get请求的参数,获取当前web应用名称。
2.
4、通过花生壳连接外网
注册花生壳并8RMB开通账号,登录路由器打开花生壳映射(不能和花生壳客户端同时使用,会导致冲突),花生壳客户端管理页面建立新映射。

WEB服务器、应用程序服务器、HTTP服务器区别

WEB服务器、应用程序服务器、HTTP服务器有何区别?IIS、Apache、Tomcat、Weblogic、WebSphere都各属于哪种服务器,这些问题困惑了很久,今天终于梳理清楚了:

Web服务器的基本功能就是提供Web信息浏览服务。它只需支持HTTP协议、HTML文档格式及URL。与客户端的网络浏览器配合。因为Web服务器主要支持的协议就是HTTP,所以通常情况下HTTP服务器和WEB服务器是相等的(有没有支持除HTTP之外的协议的web服务器,作者没有考证过),说的是一回事。

应用程序服务器(简称应用服务器),我们先看一下微软对它的定义:”我们把应用程序服务器定义为“作为服务器执行共享业务应用程序的底层的系统软件”。 就像文件服务器为很多用户提供文件一样,应用程序服务器让多个用户可以同时使用应用程序(通常是客户创建的应用程序)”

通俗的讲,Web服务器传送(serves)页面使浏览器可以浏览,然而应用程序服务器提供的是客户端应用程序可以调用(call)的方法(methods)。确切一点,你可以说:Web服务器专门处理HTTP请求(request),但是应用程序服务器是通过很多协议来为应用程序提供(serves)商业逻辑 (business logic)。

以Java EE为例,Web服务器主要是处理静态页面处理和作为 Servlet容器,解释和执行servlet/JSP,而应用服务器是运行业务逻辑的,主要是EJB、 JNDI和JMX API等J2EE API方面的,还包含事务处理、数据库连接等功能,所以在企业级应用中,应用服务器提供的功能比WEB服务器强大的多。

以这样的定义,IIS、Apache、Tomcat都可以属于Web服务器,Weblogic、WebSphere都属于应用服务器。

Apache:在Web服务器中,Apache是纯粹的Web服务器,经常与Tomcat配对使用。它对HTML页面具有强大的解释能力,但是不能解释嵌入页面内的服务器端脚本代码(JSP/Servlet)。

Tomcat:早期的Tomcat是一个嵌入Apache内的JSP/Servlet解释引擎Apache+Tomcat就相当于IIS+ASP。后来的Tomcat已不再嵌入Apache内,Tomcat进程独立于Apache进程运行。 而且,Tomcat已经是一个独立的Servlet和JSP容器,业务逻辑层代码和界面交互层代码可以分离了。因此,有人把Tomcat叫做轻量级应用服务器。

IIS:微软早期的IIS,就是一个纯粹的Web服务器。后来,它嵌入了ASP引擎,可以解释VBScript和JScript服务器端代码了,这时,它就可以兼作应用服务器。当然,它与J2EE应用服务器根本无法相比,但是,从功能上说,从原理上说,它勉强可以称之为应用服务器。确切地说,它是兼有一点应用服务器功能的Web服务器。

综上:Apache是纯粹的web服务器,而Tomcat和IIS因为具有了解释执行服务器端代码的能力,可以称作为轻量级应用服务器或带有服务器功能的Web服务器。Weblogic、WebSphere因为能提供强大的J2EE功能,毫无疑问是*对的应用服务器。对于处于中间位置的Tomcat,它可以配合纯Web服务器Apache一起使用,也可以作为应用服务器的辅助与应用服务器一起部署:

一、Tomcat与应用服务器

到目前为止,Tomcat一直被认为是Servlet/JSP API的执行器,也就所谓的Servlet容器。然而,Tomcat并不仅仅如此,它还提供了JNDI和JMX API的实现机制。尽管如此,Tomcat仍然还不能算是应用服务器,因为它不提供大多数J2EE API的支持。

很有意思的是,目前许多的应用服务器通常把Tomcat作为它们Servlet和JSP API的容器。由于Tomcat允许开发者只需通过加入一行致谢,就可以把Tomcat嵌入到它们的应用中。遗憾的是,许多商业应用服务器并没有遵守此规则。

对于开发者来说,如果是为了寻找利用Servlet、JSP、JNDI和JMX技术来生成Java Web应用的话,选择Tomcat是一个优秀的解决方案;但是为了寻找支持其他的J2EE API,那么寻找一个应用服务器或者把Tomcat作为应用服务器的辅助,将是一个不错的解决方案;第三种方式是找到独立的J2EE API实现,然后把它们跟Tomcat结合起来使用。虽然整合会带来相关的问题,但是这种方式是*为有效的。。

二、Tomcat与Web服务器

Tomcat是提供一个支持Servlet和JSP运行的容器。Servlet和JSP能根据实时需要,产生动态网页内容。而对于Web服务器来说, Apache仅仅支持静态网页,对于支持动态网页就会显得无能为力;Tomcat则既能为动态网页服务,同时也能为静态网页提供支持。尽管它没有通常的Web服务器快、功能也不如Web服务器丰富,但是Tomcat逐渐为支持静态内容不断扩充。大多数的Web服务器都是用底层语言编写如C,利用了相应平台的特征,因此用纯Java编写的Tomcat执行速度不可能与它们相提并论。

一般来说,大的站点都是将Tomcat与Apache的结合,Apache负责接受所有来自客户端的HTTP请求,然后将Servlets和JSP的请求转发给Tomcat来处理。Tomcat完成处理后,将响应传回给Apache,*后Apache将响应返回给客户端。

而且为了提高性能,可以一台apache连接多台tomcat实现负载平衡。

关于WEB服务器、应用程序服务器的更详细区别可以参考下面这篇文章:

通俗的讲,Web服务器传送(serves)页面使浏览器可以浏览,然而应用程序服务器提供的是客户端应用程序可以调用(call)的方法(methods)。确切一点,你可以说:Web服务器专门处理HTTP请求(request),但是应用程序服务器是通过很多协议来为应用程序提供(serves)商业逻辑 (business logic)。

下面让我们来细细道来:

Web服务器(Web Server)

Web服务器可以解析(handles)HTTP协议。当Web服务器接收到一个HTTP请求(request),会返回一个HTTP响应 (response),例如送回一个HTML页面。为了处理一个请求(request),Web服务器可以响应(response)一个静态页面或图片,进行页面跳转(redirect),或者把动态响应(dynamic response)的产生委托(delegate)给一些其它的程序例如CGI脚本,JSP(JavaServer Pages)脚本,servlets,ASP(Active Server Pages)脚本,服务器端(server-side)JavaScript,或者一些其它的服务器端(server-side)技术。无论它们(译者注:脚本)的目的如何,这些服务器端(server-side)的程序通常产生一个HTML的响应(response)来让浏览器可以浏览。

要知道,Web服务器的代理模型(delegation model)非常简单。当一个请求(request)被送到Web服务器里来时,它只单纯的把请求(request)传递给可以很好的处理请求 (request)的程序(译者注:服务器端脚本)。Web服务器仅仅提供一个可以执行服务器端(server-side)程序和返回(程序所产生的)响应(response)的环境,而不会超出职能范围。服务器端(server-side)程序通常具有事务处理(transaction processing),数据库连接(database connectivity)和消息(messaging)等功能。

虽然Web服务器不支持事务处理或数据库连接池,但它可以配置(employ)各种策略(strategies)来实现容错性(fault tolerance)和可扩展性(scalability),例如负载平衡(load balancing),缓冲(caching)。集群特征(clustering—features)经常被误认为仅仅是应用程序服务器专有的特征。

应用程序服务器(The Application Server)

根据我们的定义,作为应用程序服务器,它通过各种协议,可以包括HTTP,把商业逻辑暴露给(expose)客户端应用程序。Web服务器主要是处理向浏览器发送HTML以供浏览,而应用程序服务器提供访问商业逻辑的途径以供客户端应用程序使用。应用程序使用此商业逻辑就象你调用对象的一个方法 (或过程语言中的一个函数)一样。

应用程序服务器的客户端(包含有图形用户界面(GUI)的)可能会运行在一台PC、一个Web服务器或者甚至是其它的应用程序服务器上。在应用程序服务器与其客户端之间来回穿梭(traveling)的信息不仅仅局限于简单的显示标记。相反,这种信息就是程序逻辑(program logic)。正是由于这种逻辑取得了(takes)数据和方法调用(calls)的形式而不是静态HTML,所以客户端才可以随心所欲的使用这种被暴露的商业逻辑。

在大多数情形下,应用程序服务器是通过组件 (component) 的应用程序接口(API)把商业逻辑暴露(expose)(给客户端应用程序)的,例如基于J2EE(Java 2 Platform, Enterprise Edition)应用程序服务器的EJB(Enterprise JavaBean)组件模型。此外,应用程序服务器可以管理自己的资源,例如看大门的工作(gate-keeping duties)包括安全(security),事务处理(transaction processing),资源池(resource pooling),和消息(messaging)。就象Web服务器一样,应用程序服务器配置了多种可扩展(scalability)和容错(fault tolerance)技术。

一个例子

例如,设想一个在线商店(网站)提供实时定价(real-time pricing)和有效性(availability)信息。这个站点(site)很可能会提供一个表单(form)让你来选择产品。当你提交查询 (query)后,网站会进行查找(lookup)并把结果内嵌在HTML页面中返回。网站可以有很多种方式来实现这种功能。我要介绍一个不使用应用程序服务器 的情景和一个使用应用程序服务器的情景。观察一下这两中情景的不同会有助于你了解应用程序服务器的功能。

情景1:不带应用程序服务器的Web服务器

在此种情景下,一个Web服务器独立提供在线商店的功能。Web服务器获得你的请求(request),然后发送给服务器端(server- side)可以处理请求(request)的程序。此程序从数据库或文本文件(flat file,译者注:flat file是指没有特殊格式的非二进制的文件,如properties和XML文件等)中查找定价信息。一旦找到,服务器端(server-side)程序把结果信息表示成(formulate)HTML形式,*后Web服务器把会它发送到你的Web浏览器。

简而言之,Web服务器只是简单的通过响应(response)HTML页面来处理HTTP请求(request)。

情景2:带应用程序服务器的Web服务器

情景2和情景1相同的是Web服务器还是把响应(response)的产生委托(delegates)给脚本(译者注:服务器端 (server-side)程序)。然而,你可以把查找定价的商业逻辑(business logic)放到应用程序服务器上。由于这种变化,此脚本只是简单的调用应用程序服务器的查找服务(lookup service),而不是已经知道如何查找数据然后表示为(formulate)一个响应(response)。这时当该脚本程序产生HTML响应(response)时就可以使用该服务的返回结果了。

在此情景中,应用程序服务器提供(serves)了用于查询产品的定价信息的商业逻辑。(服务器的)这种功能(functionality)没有指出有关显示和客户端如何使用此信息的细节,相反客户端和应用程序服务器只是来回传送数据。当有客户端调用应用程序服务器的查找服务(lookup service)时,此服务只是简单的查找并返回结果给客户端。

通过从响应产生(response-generating)HTML的代码中分离出来,在应用程序之中该定价(查找)逻辑的可重用性更强了。其他的客户端,例如收款机,也可以调用同样的服务(service)来作为一个店员给客户结帐。相反,在情景1中的定价查找服务是不可重用的因为信息内嵌在 HTML页中了。

总而言之,在情景2的模型中,在Web服务器通过回应HTML页面来处理HTTP请求(request),而应用程序服务器则是通过处理定价和有效性(availability)请求(request)来提供应用程序逻辑的。

警告(Caveats)

现在,XML Web Services已经使应用程序服务器和Web服务器的界线混淆了。通过传送一个XML有效载荷(payload)给服务器,Web服务器现在可以处理数据和响应(response)的能力与以前的应用程序服务器同样多了。

另外,现在大多数应用程序服务器也包含了Web服务器,这就意味着可以把Web服务器当作是应用程序服务器的一个子集(subset)。虽然应用程序服务器包含了Web服务器的功能,但是开发者很少把应用程序服务器部署(deploy)成这种功能(capacity)(译者注:这种功能是指既有应用程序服务器的功能又有Web服务器的功能)。相反,如果需要,他们通常会把Web服务器独立配置,和应用程序服务器一前一后。这种功能的分离有助于提高性能(简单的Web请求(request)就不会影响应用程序服务器了),分开配置(专门的Web服务器,集群(clustering)等等),而且给*佳产品的选取留有余地。

Android 查看app包名

一,有apk安装包

二,没有apk,但已安装到Android设备中

 

一,有apk安装包
1.1,使用aapt的dump badging命令查看app包名

a,使用cmd命令行中cd 切换到aapt所在的目录,如果已经为aapt配置了环境变量,可以跳过!

%title插图%num

b,输入 aapt dump badging C:\Users\Administrator\Desktop\adbc.apk命令运行,OK;

其中C:\Users\Administrator\Desktop\adbc.apk是app所在的路径

%title插图%num

还可以这样输入:

aapt dump badging C:\Users\Administrator\Desktop\adbc.apk | findstr “package” >E:\package.txt

其中:| findstr “package” 过滤出带有package信息

>E:\package.txt 输出到指定的文件,没有这个文件会自动创建;

1.2,使用aapt的 dump xmltree命令查看包名

a,和1.1中的a步骤一样

b,命令行中输入 aapt dump xmltree C:\Users\Administrator\Desktop\adbc.apk AndroidManifest.xml | findstr “package” 命令运行,OK;也可以不要 | findstr “package” 加上他只是起到过滤的作用,把我们想要的包名过滤出来;

其中C:\Users\Administrator\Desktop\adbc.apk是app所在的路径

%title插图%num

二,没有apk,但已安装到Android设备中
2.1,通过adb

a,PC连接Android设备

b,Android设备中点开app,app的任何界面都可以;

c,cmd命令行中输入:adb shell dumpsys window w |findstr \/ |findstr name= 或者 adb shell dumpsys window | findstr mCurrentFocus查看包名

%title插图%num

2.2,也是通过adb

a,PC连接Android设备

b,cmd 进入命令行,输入: adb shell pm list package  列出所有的应用的包名 (-s:列出系统应用  -3:列出第三方应用 -f:列出应用包名及对应的apk名及存放位置  -i:列出应用包名及其安装来源)

常用的java应用服务器大概介绍

何为应用服务器呢?它主要为应用程序提供运行环境,为组件提供服务。想进一步了解,可以查看我的博客:何为容器?

Java 的应用服务器很多,从功能上分为两类:WEB 应用服务器和 Java EE 应用服务器。相对来说 Java EE 服务器的功能更加强大。

WEB 服务器

Tomcat 、Bejy Tiger 、Geronimo 、 Jetty 、Jonas 、Jrun 、Orion 、Resin。

Java EE 服务器

TongWeb 、BES Application Server 、 Apusic Application Server 、 IBM Websphere 、Sun Application Server 、Oracle 的 Oracle9i/AS 、Sun Java System Application Server 、Bea Weblogic 、JBoss、开源GlassFish。

下面简单介绍几个应用服务器。

Apache Tomcat
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,*新的Servlet 和JSP 规范总是能在Tomcat 中得到体现。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

优点:
1、免费的开源代码
2、轻量级应用服务器,在中小型 系统 和并发访问用户不是很多的场合下被普遍使用
3、占用的系统资源小,启动快
4、扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能

目前*新版本是8.0。

Jetty
Jetty 是一个开源的WEB容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行的Java应用提供网络和web连接。

优点:
1、免费的开源代码
2、轻量级,运行速度快。
3、易用
默认配置可以满足大部分的需求;将 Jetty 嵌入到应用程序当中只需要非常少的代码;
4、可扩展
Jetty 设计了非常良好的接口,用户可以非常方便地对 Jetty 的某些实现进行修改,使得 Jetty 适用于特殊的应用程序的需求。
5、易嵌入
Jetty 设计之初就是作为一个优秀的组件来设计的,这也就意味着 Jetty 可以非常容易的嵌入到应用程序当中。从某种程度上,你也可以把 Jetty 理解为一个嵌入式的Web服务器。

目前*新版本是:9.1.4

JBoss
JBoss是全世界开发者共同努力的成果,一个基于J2EE的开放源代码的应用服务器。因为JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用它,而不用支付费用。2006年,Jboss公司被Redhat公司收购。JBoss 是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3.0的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。
另外,JBoss在J2EE应用服务器领域已成为发展*为迅速的应用服务器.在市场占有率和服务满意度上取得了巨大的成功,丝毫不逊色于其它的非开源竞争对手,如WebSPhere、WebLogic、Application Server.

优点:

1、标准的开源J2EE容器
2、性能好,执行效率高
3、支持集群,理论上无*大访问量限制一说。
4、可伸缩性强
可伸缩性应该是架构选择的主要标准,所谓可伸缩性,只在小型系统、一台服务器情况下,我的系统也可以良好运转,多台服务器扩展后,我的系统只需通过增加硬件就可以实现性能扩展,无需修改太多软件。
5、支持热部署

目前JBOSS的*新版本号为7.1。

BEA WebLogic (收费)
WebLogic是Oracle的主要产品之一,是商业市场上主要的Java(J2EE)应用服务器软件(application server)之一,是世界上*个成功商业化的J2EE应用服务器。它是一套基于JAVA功能强大的电子商务套件,提供了许多功能强大的中间件以方便 编程 人员编写的JSP、SERVLET 等电子商务应用,可以为企业提供一个完整的商务应用解决方案。

优点:
1、标准
对业内多种标准的全面支持,使Web应用系统的实施更为简单。
2、可扩展性
WebLogic Server以其高扩展的架构体系闻名于业内,包括客户机连接的共享、资源pooling以及动态网页和EJB组件群集。
3、快速开发
凭借对EJB和JSP的支持,以及BEA WebLogic Server 的Servlet组件架 构体系,可加速投放市场速度。
4、更趋灵活
BEA WebLogic Server的特点是与* 数据库 、操作系统和Web服务器紧密集成。
5、可靠性
其容错、系统管理和安全性能已经在全球数以千记的关键任务环境中得以验证。

目前WEBLOGIC*新版本号为:12c

IBM WebSphere (收费)
WebSphere Application Server 是一种功能完善、开放的Web应用程序服务器,是IBM电子商务计划的核心部分。WebSphere 是随需应变的电子商务时代的*主要的软件平台。使用它,你可以开发、部署和整合新一代的电子商务应用,如B2B电子商务,并支持从简单的网页内容发布到企业级事务处理的商业应用。

目前WEBSPHERE*新版本号为:8.5.5

BEA公司的Weblogic服务器和IBM的Websphere在J2EE应用服务器市场中占据*对主导地位,都是商用产品。而JBoss和Tomcat算是开源的应用服务器界的两大明星。个人愚见,如果开发的是大型的、开放的、需要安全级别较高的系统,*好选用WebLogic 或Websphere等商用应用服务器,如果你开发的系统是分布式的,而且仅仅在公司内部使用,那么你可以选择JBoss。当然,大家都知道Tomcat是一个web 应用服务器,如果你开发的系统较小型,不涉及分布式等,那Tomcat将是你不错的选择。

通过阿里云域名动态解析 IP 地址

这两天在家里用树莓派折腾了一个家用服务器,主要用来做 mac 的 Time Machine ,还有就是当做下载机和 nas ,想着平时上班时间家里没人用网络,空着也是空着,就可以利用空闲带宽下个美剧啥的。所以在服务器上装了个远程迅雷和 transmission ,这些网上教程一大把,跟着教程做很快就能搞好。

但是我遇到的问题就是,家用的宽带不是固定 IP 的,如果路由器断个网重新连接就会被分配到不同的 ip ,一旦 ip 换了那就没办法通过外网连接到服务器上了。之前也尝试过在路由器上绑定花生壳,但是实际使用效果不是很好,不是很清楚花生壳的动态更新机制,好几次家里网络已经更新了 ip 但是花生壳那边没有及时更新。

花生壳的方案不行,那就只有找别的方法了。同时我顺便了解了下花生壳能够动态解析域名的原因,原来使用的是 DDNS 服务,关于 DDNS ,网上的解释是:

DDNS ( Dynamic Domain Name Server )是动态域名服务的缩写。
DDNS 是将用户的动态 IP 地址映射到一个固定的域名解析服务上,用户每次连接网络的时候客户端程序就会通过信息传递把该主机的动态 IP 地址传送给位于服务商主机上的服务器程序,服务器程序负责提供 DNS 服务并实现动态域名解析。 –百度百科

这不正是我需要的功能么,正好我自己也有域名,我的域名是在阿里云上注册的,所以我就去阿里云上看有没有提供动态域名解析服务,果不其然在网站上找到了修改解析记录的 api 文档。

由于我比较擅长的是 java(其实也是唯一擅长的),所以我下了他们的 JAVA SDK ,申请好Access Key 很快就接入成功了,但是感觉在 Linux 服务器上用 Java 来执行更新好像是件很 Low 的事,正常的使用方式应该用脚本才对啊。正好*近我在自学 Phthon ,所以顺便边学边做用 python 脚本来实现吧。

好啦,以上的都是废话,下面的才是正题。

1.首先你得有个阿里云的域名

2.到阿里云管理控制台申请Access Key

3.下载Python sdk,SDK 主要帮我们封装好了一些数据格式转换和对接的方法,能够方便我们快速接入,当然如果你足够牛逼的话,你也完全可以全部自己写。

4.进行接入操作。我的主要思路是运行该脚本的时候先去阿里云获取域名绑定的 ip 地址,再跟
当前服务器 ip 地址做对比,如果 ip 相同则说明没改变,不需要操作。如果 ip 不同则修改域名绑定的 ip 地址。

5.服务器部署。在服务器上通过 corntab 设置一项定时计划,让服务器定期执行该脚本。 linux 设置定时计划命令:

crontab -e

几个注意点:

1.请记得保管好你的 Access Key ,所以我没有在我的代码里直接写 Access Key Id 和 Access Key Secret ,我把他们单独放在一个 key.json 文件中,同时将这个文件排除出 git ,保证只有我自己知道,因为一旦这两个值泄露了那别人就可以直接修改你的域名了。

2.阿里云通过 RecordId 来区分每条域名解析记录,但是他们之前文档上对于这个参数的描述只写了“解析记录的 ID ”,没有写如何获取这条解析记录 ID ,我去我的阿里云控制台上找了好久都没找到,到后来我突然想到 sdk 上有获取域名信息的 api ,我试着用这个果然返回的信息里有这个字段,后来联系了他们客服,他们也说在控制台上没办法找到,也只有通过 api 获取域名信息才能找到,后来他们也在文档中注明了这个字段的获取方式。

3.更新域名解析主要用到的是阿里云 sdk 包里 aliyun/api/rest/Dns20150109UpdateDomainRecordRequest.py 方法,我为了偷懒直接在这个方法里写死了一些需要固定传入的参数,如果你要对自己的域名做解析的话记得去修改这些参数值。

4.我已经把这个项目发到 github 上,欢迎有需要的使用,同时也欢迎一起交流

abelyao 2016-01-10 16:29:22 +08:00 ❤️ 3
话说… 楼主… 如果只是为了 DDNS 可以用 Dnspod 有 API 可以直接操作…
并且通过 cron 定时任务,一行脚本的事…

*/15 * * * * curl -k -X POST https://dnsapi.cn/Record.Ddns -d ‘login_email=登录邮箱&login_password=登录密码&format=json&domain_id=域名编号&record_id=记录编号&record_line=默认&sub_domain=子域名’

每 15 分钟更新一次
abelyao 2
abelyao 2016-01-10 16:30:18 +08:00
当然… 我赞同所有以学习为目的的折腾,上面的回复仅仅针对 DDNS 的多种实现方式…
abcbit 3
abcbit 2016-01-10 16:30:22 +08:00
何必這麼麻煩,而且 DDNS 的可靠性太差,更新也慢

1 、租個 vps ,裝上 nginx+php 或 python
2 、树莓派定期執行 wget 或 curl 到 vps 的網址,*好加上驗證比如 a.com/get?key=1234
3 、訪問 vps 上的網頁,得到*新的 remote_addr
yexm0 4
yexm0 2016-01-10 16:39:56 +08:00 via Android
ddns 更新应该不慢吧。我用路由器挂 he 的 ipv6 隧道就要用到它们给的 ddns 功能,我见每次重拨后域名对应的 ip 都有及时更新啊。
bdbai 5
bdbai 2016-01-10 16:46:54 +08:00 via iPhone
@abelyao 原来 DNSPod 还有这一手…蠢蠢的我还去解析手机版页面登录提交?
abelyao 6
abelyao 2016-01-10 16:49:19 +08:00 ❤️ 2
@bdbai Dnspod 的 api 功能还挺丰富的~ 而且任何帐号都可以使用,不需要申请啥的
miaol 7
miaol 2016-01-10 16:52:53 +08:00 ❤️ 1
@abelyao
1.你这个果然好简单,一行代码能搞定,我之前真的不知道还有这个,又学到了一个新技能,非常感谢?
2.我的域名是放在阿里云上的,如果要用 dnspod 的话得把我的域名转过去才行,我对阿里云的服务还是比较满意的,暂时不想换
3.好吧被你说中了,其实我真的只是自己闲着没事干想吓折腾下而已==!
bdbai 8
bdbai 2016-01-10 16:59:37 +08:00 via iPhone
@abelyao 多谢指点。下面给一个 API 文档供其他同学参考:
https://www.dnspod.cn/docs/records.html#dns
abelyao 9
abelyao 2016-01-10 18:40:32 +08:00 ❤️ 1
@miaol @bdbai 两位客气啦 🙂
虽然都是折腾,可能目的也不一样,所以一起学习嘛。
我当初是为了直接刷了 OpenWrt 的路由器能直接动态解析域名,又不想在路由器上装过于复杂的插件,所以找到了这个方法,路由器是 24 小时开机的,这样就算每天电信给我换 IP 我也不需要第二台设备就可以随时 DDNS 啦。
bdbai 10
bdbai 2016-01-10 18:47:22 +08:00 via iPhone
@abelyao 没有别人指点的折腾,走了弯路自己都不知道?

Slienc7 11
Slienc7 2016-01-10 19:02:28 +08:00
花生壳更新不及时是路由器的问题,不是花生壳的问题。

花生壳也有 API 。
miaol 12
miaol 2016-01-10 19:34:52 +08:00
@xgowex 我觉得应该也是,但是路由器只能填花生壳账号信息,没办法对更新频率做设置。好吧,是我误会花生壳了,他是个好同志==!
wuhanpizi 13
wuhanpizi 2016-01-10 21:40:17 +08:00
@miaol 不需要转到 dnspod~~直接使用他们的解析就 ok ~~解析服务器改成他们的即可
miaol 14
miaol 2016-01-10 23:18:50 +08:00
@wuhanpizi 果然是这样啊,只能怪我之前了解的太少了,但是我这个都已经弄好了懒得再换了,不过又学到了一种新的实现方法也挺好的,非常感谢!
maskerTUI 15
maskerTUI 2016-01-10 23:27:37 +08:00 via Android
看到前面我就想起 tunnel 了
clanned 16
clanned 2016-01-11 00:15:11 +08:00 via Android
Dnspod 或者 cloudxns 可以参考我这里的脚本 https://github.com/xdtianyu/scripts/tree/master/ddns ,我在 ddwrt 和 openwrt 上用了很久了。 https://www.xdty.org/?s=Ddns
lesliejiang 17
lesliejiang 2016-12-26 23:08:13 +08:00
@abcbit 好想知道具体怎样做的。被动态 IP 搞死~
Terenc3 18
Terenc3 2017-02-08 13:52:49 +08:00
我的动态域名也放在阿里云,其他域名都在 DNSPOD ,主要是阿里云年付 40 块就可以买到 TTL 1 秒的付费服务!!!!

1 秒,什么概念! 不过我一般用 30 秒,因为 1 秒太夸张了,基本上每次访问都要去获取 DNS 。另外阿里云 DNS 同步速度挺快的,家里用 PPPoE ,然后使用 python 写了个脚本调用 API ,再使用 crontab 设一个任务每分钟获取。

用了半年,非常平稳。

请原谅我再一次地推销我的文章:
通过 python 将阿里云 DNS 解析作为 DDNS 使用 >> 文章短链接 >> https://c4.hk/2l
Alliot 19
Alliot 2017-04-10 11:33:43 +08:00
呼,过了几个路由,感觉还是得用内网穿透了
ferock 20
ferock 2017-05-31 14:24:37 +08:00
@abelyao 已测,可用
jethroso 21
jethroso 2017-11-16 12:51:51 +08:00
@abelyao 请教“ domain_id=域名编号&record_id=记录编号”怎么填写?谢谢!
snowice123 22
snowice123 2018-04-19 22:16:53 +08:00
@abelyao 你好,可以回复一下我吗,大哥,我现在急需弄一个阿里云动态 DNS,用做厂里的 * 连接,你这招是怎么弄的啊,谢谢,你能留一下 QQ 吗,
snowice123 23
snowice123 2018-04-19 22:19:19 +08:00
@miaol 大哥,我现在急需一个你这样的阿里云 DNS ——因为现在用的是花生壳的 DDNS,不稳定,能教一下吗。1.2 步可以看懂,到第三步我就看不懂了,我没编程基础,能教下小白吗,谢谢

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速