http://t.cn/xx 等链接的生成与还原

分享一份适合零基础学习的人工智能教程,通俗易懂,旨在普及AI知识,助力民族复兴。

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.youkuaiyun.com/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                       

在微博等社交平台,我们添加链接(或者转载一些链接)时,后台一般会将域名转换为 t.cn 等形式。

2011 年 3 月,新浪微博正式启用收购已久的 t.cn 短网址,取代之前的并不短的短连接 http://sinaurl.cn/** 。(http://www.chinaz.com/news/2011/0323/167225.shtml

  • t.cn 是最短的域名(之一,老罗的锤子科技还是还搞了一个  t.tt),
  • t 是微博的代名词,而不仅仅是新浪微博的代名词,(因为 twitter 是微博的鼻祖)
  • twitter 有 t.co 作为其短网址,sina 也有其 t.cn,t.co 有其国际优势,t.cn 也有其中国特色

这里提供一个该链接的生成与还原的在线站点:

生成短网址、还原短网址,t.cn,url.cn,dwz.cn短网址供你选择!

除 t.cn 以外,还支持以下,域名:

  • 985.so
  • dwz.cn
  • is.gd
  • url.cn

淘宝短连接:

  • c.tb.cn/**
           

给我老师的人工智能教程打call!http://blog.youkuaiyun.com/jiangjunshow
这里写图片描述
# 追加加密卡jni,解决安装完新硬件补丁包后再升级patch会覆盖jni的问题 function exportCryptoCertNativeLib(){ # 加密卡jni存放路径 hsmjni=/opt/infosec/NetSignServer52/hsm/jni # 查找加密卡驱动 certType=1 if [[ -e /opt/infosec/NetSignServer52/hsm/driver/info.txt ]];then certType=$(< /opt/infosec/NetSignServer52/hsm/driver/info.txt grep -c -E "fm|fisher man 1.0") fi # 默认使用原有nativelib库 LD_LIBRARY_PATH=/opt/infosec/NetSignServer52/NetSignServer/nativelib:$LD_LIBRARY_PATH # 判断加密卡类型 if [[ $certType -eq 0 ]];then # 不是渔翁卡驱动 # 删除nativelib下的相关驱动,重新指定jni存放路径 rm -rf /opt/infosec/NetSignServer52/NetSignServer/nativelib/libonlysdfjni.so LD_LIBRARY_PATH=/opt/infosec/NetSignServer52/NetSignServer/nativelib:$hsmjni:$LD_LIBRARY_PATH fi export LD_LIBRARY_PATH } exportCryptoCertNativeLib hsmdriver=/opt/infosec/NetSignServer52/hsm/driver nsserver=/opt/infosec/NetSignServer52/NetSignServer cd $nsserver ulimit -n 65535 export LANG=zh_CN.GBK echo "65535" > /proc/sys/net/core/somaxconn if [ $# = 0 ] then echo "Usage NetSignServer.sh [OPTION]" echo "Input one of -start,-stop,-restart,-version,-test" echo "-start Start NetSignServer" echo "-stop Stop NetSignServer" echo "-restart Restart NetSignServer" echo "-version Show version of NetSignServer" echo "-test Send a attachedsign request to NetSignServer" exit 0 fi #LD_LIBRARY_PATH=./nativelib LD_LIBRARY_PATH=/opt/infosec/NetSignServer52/NetSignServer/nativelib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH if [ $1 = "-start" ] then count=`ps -ef | grep cn.com.infosec.netsign.NetSignServer | grep -v grep | wc -l` if [ $count = 0 ] then #test hsmcard if exist if [ -e $hsmdriver ] then cd $hsmdriver ret=`./testcard.sh` if [ "$ret" != "success" ] then echo "Test crypto card failed" exit -1 else echo "Test crypto card ok" fi fi #Start Downloadcrl service cd $nsserver/DownLoadCRL ./StartDownloadCRL.sh cd .. #Start NetSignServer #echo "Checking nohup.out..." #rownum=`cat nohup.out | wc -l` #if [ $rownum -gt 50000 ] #then # echo "Clearing nohup.out because it was over 50000 lines." # echo "" > nohup.out #fi if [ ! -e log/gclog ] then mkdir -p log/gclog fi if [ -e log/gclog/gclog.log ] then bakname=`date '+%F_%T'` mv log/gclog/gclog.log log/gclog/gclog.log.$bakname fi PATH=$PATH:./nativelib:/opt/jprofiler4/bin export PATH ../jdk/bin/java -Djava.awt.headless=true -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.access.file=/opt/infosec/NetSignServer52/NetSignServer/config/jmxremote.access -Dcom.sun.management.jmxremote.password.file=/opt/infosec/NetSignServer52/NetSignServer/config/jmxremote.password -server -Xlog:gc*=info:file=log/gclog/gclog.log-%p-%t:time,uptimemillis,pid,level,tags:filecount=5,filesize=102400 -Xms4000M -Xmx4000M -XX:NewRatio=2 -classpath lib/*:lib/classes:lib/webservice/* cn.com.infosec.netsign.NetSignServer -start >>nohup.out 2>>nohup.out & echo "NetSignServer starting in progress..." sleep 10 count=$(ps aux|grep cn.com.infosec.netsign.NetSignServer|grep -v grep|wc -l) #count=`cat StartInfo.txt | head -n 1` if [ "$count" != "1" ] then echo "NetSignServer start failed. Please check up the nohup.out." else echo "NetSignServer started." fi else echo "NetSignServer is running" fi elif [ $1 = "-stop" ] then ./Shutdown elif [ $1 = "-restart" ] then ./Shutdown sleep 1 ./NetSignServer.sh -start elif [ $1 = "-test" ] then ../jdk/bin/java -Djava.awt.headless=true -server -classpath lib/*:lib/classes:lib/webservice/* cn.com.infosec.netsign.agent.test.AttachedSignTest else ../jdk/bin/java -Djava.awt.headless=true -classpath lib/*:lib/classes:lib/webservice/* cn.com.infosec.netsign.NetSignServer $@ fi NetSignServer.sh脚本内容如上
11-06
<think> 我们正在讨论Dubbo中使用WebService协议时,服务注册地址和实际访问地址的关系。 根据Dubbo官方文档,当使用WebService协议时,Dubbo会将服务以WebService的形式暴露出来。 在注册中心(如Zookeeper)中,服务提供者的URL会以特定的格式存储,例如:webservice://192.168.1.10:8080/com.xx.UserService。 这个URL是Dubbo内部使用的服务提供者地址,它使用了一个自定义的协议名“webservice”,但实际上该服务是通过HTTP协议对外提供WebService服务的。 实际调用时,客户端(如手机端)需要通过HTTP协议来访问WebService服务。WebService服务通常有两个重要的URL: 1. 服务端点(Endpoint):用于接受SOAP请求,例如:http://192.168.1.10:8080/com.xx.UserService 2. WSDL文档地址:用于描述服务,例如:http://192.168.1.10:8080/com.xx.UserService?wsdl 因此,我们需要将Dubbo注册的URL(webservice://192.168.1.10:8080/com.xx.UserService)转换为实际的HTTP地址。 转换规则: 1. 协议替换:将“webservice://”替换为“http://”(因为WebService实际使用HTTP传输)。 2. 添加WSDL查询参数:为了获取WSDL文档,需要在URL后面添加“?wsdl”。 所以,webservice://192.168.1.10:8080/com.xx.UserService 对应的WSDL地址就是: http://192.168.1.10:8080/com.xx.UserService?wsdl 另外,根据引用[1]中的例子,Axis2生成的WSDL地址为:http://localhost:8080/axis2/services/CalculatorService?wsdl,这进一步验证了WSDL地址的格式。 同时,引用[2]中提到了通过注解修改服务访问点名称,这可能会影响生成的URL,但基本结构不变。 总结关系: - Dubbo内部注册的URL使用自定义协议头“webservice”来标识这是一个WebService协议的服务。 - 实际访问时,必须通过HTTP协议访问,且WSDL文档的获取是在服务端点URL后加上“?wsdl”。 因此,这两个地址实际上是同一个服务的不同表示: webservice://192.168.1.10:8080/com.xx.UserService 是Dubbo在注册中心中表示服务提供者的URL。 http://192.168.1.10:8080/com.xx.UserService?wsdl 是实际用于获取服务描述文档(WSDL)的HTTP地址。 </think>### WebService协议地址HTTP地址的关系详解 `webservice://192.168.1.10:8080/com.xx.UserService` `http://192.168.1.10:8080/com.xx.UserService?wsdl` 的关系如下: ```mermaid graph LR A[webservice协议地址] -->|Dubbo内部表示| B[webservice://192.168.1.10:8080/com.xx.UserService] A -->|实际访问| C[http://192.168.1.10:8080/com.xx.UserService] C -->|获取服务描述| D[?wsdl参数] D --> E[http://192.168.1.10:8080/com.xx.UserService?wsdl] ``` #### 一、核心关系 1. **协议转换关系** `webservice://` 是 Dubbo 内部的协议标识符,实际通信时会被转换为标准 HTTP 协议: $$ \text{webservice://} \rightarrow \text{http://} $$ 2. **功能关系** - **无参数地址**:`http://192.168.1.10:8080/com.xx.UserService` ▸ 服务端点(Endpoint):接收 SOAP 请求的实际接口 ▸ 示例请求: ```xml <soap:Envelope> <soap:Body> <ns2:getUser xmlns:ns2="http://service.xx.com/"/> </soap:Body> </soap:Envelope> ``` - **带参数地址**:`http://...?wsdl` ▸ 服务描述文件:包含服务接口的 WSDL 定义[^1][^2] ▸ 作用:客户端据此生成代理类(如 Axis2/CXF 生成的 `ObjectFactory`, `SayHelloResponse` 等[^4]) #### 二、技术实现对比 | **特性** | `webservice://` 地址 | `http://...?wsdl` 地址 | |---------|----------------------|------------------------| | 协议类型 | Dubbo 自定义协议标识 | 标准 HTTP 协议 | | 使用场景 | Dubbo 注册中心存储 | 客户端获取服务定义 | | 数据格式 | 二进制元数据 | XML 格式的 WSDL 文档 | | 访问方式 | Dubbo 内部解析 | 浏览器/HTTP 客户端直接访问 | | 内容 | 服务元信息(IP/端口/接口) | 完整的服务契约定义 | #### 三、地址转换过程 Dubbo 服务注册时: ```java // Dubbo 内部处理(简化代码) String serviceURL = "webservice://192.168.1.10:8080/com.xx.UserService"; registry.register(URL.valueOf(serviceURL)); // 注册到Zookeeper ``` 客户端使用时: 1. 从注册中心获取 `webservice://` 地址 2. 转换为 HTTP 地址:`http://192.168.1.10:8080/com.xx.UserService` 3. 添加 `?wsdl` 获取描述文件: ```java String wsdlURL = httpURL + "?wsdl"; // 生成WSDL地址 ``` #### 四、注解定制能力(参考引用[2]) 可通过注解修改 WSDL 元素: ```java @WebService( serviceName = "UserServices", // 修改服务名 portName = "userServicePort", // 修改端口名 targetNamespace = "http://user.xx.com" // 修改命名空间 ) public class UserServiceImpl implements UserService { @WebMethod @WebResult(name = "userResponse") // 修改返回标签 public String getUser(@WebParam(name = "userId") String id) { return "User_" + id; } } ``` 修改后 WSDL 地址不变,但文档内容变化[^2][^3] #### 五、实际调用示例 生成客户端代理(引用[4]): ```java // CXF动态客户端 DynamicClientFactory dcf = DynamicClientFactory.newInstance(); Client client = dcf.createClient("http://...?wsdl"); Object[] res = client.invoke("getUser", "1001"); // 调用服务端点 ``` > **关键结论**: > `webservice://` 是 Dubbo 内部使用的**协议标识符**,而 `http://...?wsdl` 是实际对外暴露的**服务描述文件地址**。两者指向同一个服务,但前者用于服务发现,后者用于客户端生成调用代码[^1][^2][^4]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值