用TinyTSS建立本地服务器:  怎么 我建不了呢

用TinyTSS建立本地服务器:  怎么 我建不了呢,第1张

用TinyTSS建立本地服务器:? 怎么 我建不了呢???? 打开windows的命令终端(command prompt),可以在“附件”那里进入,也可以在“开始”,“运行”那里敲入命令cmd进入,注意一定要在管理员权限状态下进入命令终端,如果是xp的话在管理员帐号下就可以,如果是vista或者win7,在cmd上鼠标器右点在管理员权限状态运行, 从命令终端那里进入文件夹c:umbrella (用命令 cd ? 然后命令 cd c:umbrella) 我压缩E盘里了? 怎么去找 命令怎么打 谢谢 查看原帖>>

您好!很高兴能为您解答,   

第一层次:通信处理

微信的服务主要是基于HTTP协议,安全通过访问令牌(access_token)保证少数业务场景使用HTTPS加密协议,甚至涉及安全证书,例如微信商户的支付接口

Tiny微信框架的通讯处理由WeiXinConnector总调度,接口定义如下:

public interface WeiXinConnector {

/**

* 默认的bean配置名称

*/

public static final String DEFAULT_BEAN_NAME="weiXinConnector"

public static final String ACCESS_TOKEN="ACCESS_TOKEN"

/**

* 获取当前的管理号客户端信息

* @return

*/

Client getClient()

/**

* 获得微信消息发送者,负责往微信服务器发送消息

* @return

*/

WeiXinSender getWeiXinSender()

/**

* 获得微信消息接收者,负责解析微信服务器推送过来的消息

* @return

*/

WeiXinReceiver getWeiXinReceiver()

/**

* 获取微信的会话管理者

* @return

*/

WeiXinSessionManager getWeiXinSessionManager()

/**

* 获取微信验证令牌

* @return

*/

AccessToken getAccessToken()

/**

* 获得微信的JS访问票据

* @return

*/

JsApiTicket getJsApiTicket()

/**

* 发送微信消息

* @param message

*/

void send(ToServerMessage message)

/**

* 上传微信文件

* @param upload

*/

void upload(WeiXinHttpUpload upload)

/**

* 接收微信消息

* @param request

* @param response

*/

void receive(HttpServletRequest request,HttpServletResponse response)

}

具体到底层的HTTP和HTTPS协议通讯,org.tinygroup.weixinhttp工程提供了业务接口WeiXinHttpConnector实现具体的协议通讯。

public interface WeiXinHttpConnector {

/**

* 默认的bean配置名称

*/

public static final String DEFAULT_BEAN_NAME="weiXinHttpConnector"

/**

* 用get方式访问微信URL

*

* @param url 要访问的微信URL

* @return 请求结果

*/

String getUrl(String url)

/**

* 用post方式访问微信URL

*

* @param url 要访问的微信URL

* @param content

* @param cert

* @return 请求结果

*/

String postUrl(String url, String content,WeiXinCert cert)

/**

* 上传文件

* @param url

* @param upload

* @return

*/

String upload(String url,WeiXinHttpUpload upload)

}

目前微信框架实现了HttpClient3.1和HttpClient4.5.1两个版本的底层通讯方案,对开发人员而言只需要配置不同的依赖,而无需关心具体通讯代码。

第二层次:报文解析

本人一直对微信的报文设计颇有微词,从整体上看微信报文缺乏统一规范,XML、JSON格式混用,字段命名也不规范。Tiny微信提供WeiXinConvert接口负责报文与对象之间的转换,目前XML报文通过Xsteam转换,JSON报文通过fastjson转换。接口定义如下:

public interface WeiXinConvert extends Comparable<WeiXinConvert>{

/**

* 获得优先级

* @return

*/

int getPriority()

/**

* 设置优先级

* @param priority

*/

void setPriority(int priority)

/**

* 获得报文的状态

* @return

*/

WeiXinConvertMode getWeiXinConvertMode()

/**

* 获得结果类型

* @return

*/

Class<?>getCalssType()

/**

* 判断转换接口能否处理输入信息(微信报文会出现不同类型报文字段一致的情况,需要根据上下文判断)

* @param <INPUT>

* @param input

* @param context

* @return

*/

<INPUT>boolean isMatch(INPUT input,WeiXinContext context)

/**

* 转换消息(微信报文会出现不同类型报文字段一致的情况,需要根据上下文判断)

* @param input

* @return

*/

<OUTPUT,INPUT>OUTPUT convert(INPUT input,WeiXinContext context)

}

对开发人员而言,无需思考如何构建复杂的报文,只需依赖对应微信业务模块的子工程,构建不同的消息对象,而底层的报文解析与转换甚至通讯都由tiny框架处理。

第三层次:报文模拟发送

微信发送报文调试最麻烦的地方就是访问令牌(access_token),这个是根据用户应用动态生成的,而且只保持两个小时有效。Tiny微信框架提供了模拟测试页面,只需要bean配置页面设置相关appId和APP秘钥等参数,开发人员在页面就无需手动输入访问令牌。测试页面如下:

第四层次:报文模拟接收

接收报文通常是用来模拟手机端的发送消息,特别是一些复杂交互场景:如命令行菜单,如果每次都通过手机端调试。效率非常低。而通过本测试页面,直接输入模拟的手机报文直接就可以得到报文结果,准确并且快速。模拟页面如图:

第五层次:报文处理框架

前面在介绍微信核心接口时提到过WeiXinReceiver和WeiXinSender,分别处理微信推送消息与主动发送消息。但是用户的业务是复杂多变的,Tiny是如何保证微信框架的可扩展性呢?其实WeiXinReceiver和WeiXinSender是由一组有序WeiXinHandler组成,而每一个WeiXinHandler都可以处理一类消息,接口定义如下:

public interface WeiXinHandler extends Comparable<WeiXinHandler>{

int getPriority()

void setPriority(int priority)

WeiXinHandlerMode getWeiXinHandlerMode()

/**

* 是否匹配对象和上下文

* @param <T>

* @param message

* @return

*/

<T>boolean isMatch(T message,WeiXinContext context)

/**

* 处理对象

* @param <T>

* @param message

* @param context

*/

<T>void process(T message,WeiXinContext context)

}

简单举个例子,比如开发一个图片消息处理器ImageMessageHandler,用来处理微信客户端的图片类消息,代码如下:

public class ImageMessageHandler extends AbstractWeiXinHandler{

public WeiXinHandlerMode getWeiXinHandlerMode() {

return WeiXinHandlerMode.RECEIVE

}

public <T>boolean isMatch(T message, WeiXinContext context) {

return message instanceof ImageMessage

}

//具体业务处理

public <T>void process(T message, WeiXinContext context) {

ImageMessage mess = (ImageMessage) message

//逻辑处理

TextReplyMessage replyMessage= new TextReplyMessage()

replyMessage.setContent("回复图片消息["+mess.getPicUrl()+"]")

replyMessage.setToUserName(mess.getFromUserName())

replyMessage.setFromUserName(mess.getToUserName())

replyMessage.setCreateTime((int)(System.currentTimeMillis()/1000))

context.setOutput(replyMessage)

}

}

用户主要是编写isMatch和process这两个函数,前者决定这个业务类能处理哪些微信消息和事件,后者是真正的业务处理类。微信消息的包装和转换由微信框架提供,用户应该关心业务处理逻辑,原则上一个Handler只建议处理一类消息。编写完毕后,需要将Handler配置成bean文件,微信框架就能调用了。

ImageMessageHandler的作用是接收微信客户端发送的图片类消息,并返回图片地址给用户,效果如下:

第六层次:上下文保持

微信是有上下文概念的,比如微信应用的小游戏:猜数字。用户输入一个数字,而服务器告诉用户比目标值偏大还是偏小,直到用户猜中为止。游戏很简单,但是这就涉及到上下文会话,Tiny微信框架提供WeiXinSession接口作为上下文统一接口,而WeiXinSessionManager作为上下文的管理接口存在。

WeiXinSession接口定义如下:

public interface WeiXinSession extends Serializable{

/**

* 会话Id

* @return

*/

String getSessionId()

/**

* 是否包含某元素

* @param name

* @return

*/

boolean contains(String name)

/**

* 返回指定name的序列化对象

* @param <T>

* @param name

* @return

*/

<T extends Serializable>T getParameter(String name)

/**

* 设置序列化的参数对象

* @param <T>

* @param name

* @param value

*/

<T extends Serializable>void setParameter(String name,T value)

/**

* 取得session的创建时间。

*

* @return 创建时间戮

*/

long getCreationTime()

/**

* 取得最近访问时间。

*

* @return 最近访问时间戮

*/

long getLastAccessedTime()

/**

* 取得session的最大不活动期限,超过此时间,session就会失效。

*

* @return 不活动期限的秒数,0表示永不过期

*/

int getMaxInactiveInterval()

/**

* 设置session的最大不活动期限,单位秒

* @param maxInactiveInterval

*/

void setMaxInactiveInterval(int maxInactiveInterval)

/**

* 判断session有没有过期。

*

* @return 如果过期了,则返回<code>true</code>

*/

boolean isExpired()

/**

* 更新session

*/

void update()

}

WeiXinSessionManager管理接口主要提供创建、删除、查询上下文会话的操作API,接口定义如下:

public interface WeiXinSessionManager {

/**

* 默认的bean配置名称

*/

public static final String DEFAULT_BEAN_NAME="weiXinSessionManager"

/**

* 创建会话

* @param sessionId

* @return

*/

WeiXinSession createWeiXinSession(String sessionId)

/**

* 查询会话

* @param sessionId

* @return

*/

WeiXinSession getWeiXinSession(String sessionId)

/**

* 添加会话

* @param session

*/

void addWeiXinSession(WeiXinSession session)

/**

* 手动删除会话

* @param sessionId

* @return

*/

void removeWeiXinSession(String sessionId)

/**

* 遍历会话

* @return

*/

WeiXinSession[] getWeiXinSessions()

/**

* 清理会话过期的Session

*/

void expireWeiXinSessions()

/**

* 清理全部Session

*/

void clear()

/**

* Session最大过期时间设置,单位s,默认0

* @return

*/

int getMaxInactiveInterval()

/**

* Session清理线程首次延迟时间,单位s,默认值60

* @return

*/

int getExpireTimerDelay()

/**

* Session清理线程运行周期,单位s,默认值300

* @return

*/

int getExpireTimePeriod()

}

当然Tiny微信框架提供了上下文相关接口,不代表每一类消息强制进行会话管理,比如简单文本消息,微信客户端的位置消息,完全可以请求-响应这种模式进行处理。

第七层次:处理的水平扩展能力

前文讲过Tiny微信框架的具体业务是由WeiXinHandler接口完成的,而WeiXinHandler接口是不依赖WeiXinConnector等委托对象,因此通过扩展WeiXinHandler接口完全可以实现处理能力的水平扩展,比如Tiny框架本身有服务中心,支持分布式服务,那么我们可以在WeiXinHandler接口包装服务中心,从而实现分布式服务。

第八层次:命令处理框架

实际上一个微信公众号,许多的时候都是通过使用者用文字(语音识别也归到用文字)的方式与平台进行交互,这个时候,其实就是一个命令行的处理。Tiny微信框架通过org.tinygroup.menucommand实现相关需求,开发人员只需要配置XML就可完成复杂的命令行处理。目前支持两种模式:

简单模式。用户不需要动态数据,仅需要配置即可。类似电话黄页,支持逐级递归,针对这种模式,Tiny支持配置方式,用户无需编码。

动态模式。用户除了静态数据,还涉及动态交互,无法通过配置解决。Tiny框架提供了MenuCommandHandler接口,然后在配置中指定具体类或bean,框架就能解决。

第九层次:模板语言的引入

第十层次:模块化


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/298828.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-25
下一篇2023-04-25

发表评论

登录后才能评论

评论列表(0条)

    保存