看了一段时间ttserver的c代码。发现ttserver是根据输入的字符,寻找具体的方法。
数据到达ttserver端以后,就根据传输的代码格式拆包。
要使用tctserver可以修改ttserver-java的protocol包中的方法
增加一个叫misc的类,操作ttserver的misc方法。
package tokyotyrant.protocol;
//import org.jboss.netty.buffer.ChannelBuffer;
//
//import tokyotyrant.helper.BufferHelper;
import java.util.ArrayList;
import java.util.List;
import org.jboss.netty.buffer.ChannelBuffer;
import tokyotyrant.transcoder.ByteArrayTranscoder;
import tokyotyrant.transcoder.StringTranscoder;
import tokyotyrant.transcoder.Transcoder;
import com.dindine.ttserver.util.ListUtil;
/**
* @作用:用方法名,定位缓存数据库使用的
* @author henry
* @date 2010-4-2
*/
public class MISC extends CommandSupport<List<String>> {
private static final PacketFormat RESPONSE = code(false).end();
private final byte[] key;
private List<String> list;
private byte[][] rbuf;
private final int opts;
private final int rnum;
private final List<String> conds;
private static final Transcoder keyTranscoder = new ByteArrayTranscoder();
private static final Transcoder rbufTranscoder = new ByteArrayTranscoder();
private static final Transcoder VALUE_TRANSCODER = new StringTranscoder();
public MISC(String funcName, int opts, List<String> lstr, PacketFormat REQUEST) {
// TODO Auto-generated constructor stub
super((byte) 0x90, REQUEST, RESPONSE, keyTranscoder, rbufTranscoder);
key = ListUtil.strToBytes(funcName);
this.opts = opts;
if(lstr == null) {
rnum = 0;
} else {
rnum = lstr.size();
}
conds = lstr;
rbuf = new byte[rnum][];
}
@Override
protected void pack(PacketContext context) {
// TODO Auto-generated method stub
context.put("nsiz", key.length);
context.put("opts", opts);
context.put("rnum", rnum);
context.put("name", key);
for (int i = 0; i < rnum; i++) {
rbuf[i] = ListUtil.strToBytes(conds.get(i));
context.put("rsiz"+i, rbuf[i].length);
context.put("rbuf"+i, rbuf[i]);
}
if(conds != null)
conds.clear();
}
@Override
protected void unpack(PacketContext context) {
// TODO Auto-generated method stub
code = (Byte) context.get("code");
}
public boolean decode(ChannelBuffer in) {
if (in.readableBytes() < 1) {
return false;
}
code = in.readByte();
int rnum = in.readInt();
list = new ArrayList<String>(rnum);
for (int i = 0; i < rnum; i++) {
if(in.readableBytes() < 4) {
return false;
}
int len = in.readInt();
if(in.readableBytes() < len) {
return false;
}
byte[] value = new byte[len];
in.readBytes(value);
list.add((String)VALUE_TRANSCODER.decode(value));
}
return true;
}
@Override
public List<String> getReturnValue() {
// TODO Auto-generated method stub
if (isSuccess()) {
return list;
} else {
return null;
}
}
}
这段是我的misc的java代码组装格式。
在RDB.java中加入如下方法
public Object misc(String funcName, int opts, List<String> conds) {
PacketFormatBuilder builder = new PacketFormatBuilder();
builder.magic().int32("nsiz").int32("opts").int32("rnum").bytes("name", "nsiz");
int len = 0;
if(conds != null) {
len = conds.size();
}
for (int i = 0; i < len; i++) {
builder.int32("rsiz" + i);
builder.bytes("rbuf" + i, "rsiz" + i);
}
PacketFormat request = builder.end();
return execute(new MISC(funcName, opts, conds, request));
}
funcName就是要使用的方法名。
具体传输可以参考php-tyrant或jtokyotyrant类库写法。
分享到:
相关推荐
tokyocabinet-1.4.45.tar.gz tokyotyrant-1.1.41.tar.gz tokyotyrant-0.11.jar ch-tokyocabinet-java-1.24.0.jar
【TTServer-Docs:蘑菇街TeamTalk TTServer文档】 蘑菇街TeamTalk的TTServer是一款专为团队协作设计的服务器端软件,它提供了丰富的通信和协作功能,助力企业或团队高效沟通与工作。TTServer-Docs是该软件的官方文档...
"ttserver" 是一个基于 Tokyo Cabinet 的服务器程序,主要用于数据存储和管理。Tokyo Cabinet 是一个非常著名的键值存储系统,提供了高效、轻量级的数据持久化解决方案。它支持BDB(Berkeley DB)和HDB(Hash DB)两...
【标题】: "深入理解memcached与TTServer的使用" 【描述】: "TTServer作为一款成熟的NoSQL存储系统,已经在各种应用场景中广泛使用。它以其出色的性能、复制功能、小巧的代码库以及对key-value数据存储的良好支持,...
"TTServer V2.1.1"是一款专为用户提供便捷远程访问服务的软件。这款工具以其高效、稳定和易用性赢得了用户的喜爱,使得无论身处何地,都能轻松实现对远程计算机的控制和管理,真正打破了地理位置的限制,实现了...
"TTserver1.1.4" 是一个特定版本的服务器软件,可能是一个数据库服务或某种特定的服务器平台。从给出的信息来看,它可能是Tokyo Tyrant的一个特定版本,因为压缩包中的文件名为"tokyotyrant-1.1.41"。Tokyo Tyrant是...
《ttserver被协助端详解与应用》 在IT行业中,"ttserver被协助端"是一个常见的话题,尤其对于网络服务开发者和系统管理员来说,它扮演着至关重要的角色。"ttserver"通常指的是一个用于提供特定服务或功能的服务器...
主要用于远程协助使用,比QQ远程协助速度更快,更好用一些。 被协助者请运行“ttserver.exe”运行软件之后,随便输入一个验证码,然后点击‘被协助’,并将验证码告知协助方,协助方运行“ttclient.exe”
本项目为蘑菇街自主研发的企业级办公即时通信软件TTServer的设计源码,采用C++作为主要开发语言,并涉及Java、C、Shell等多种编程语言。项目包含218个文件,具体为81个Java文件、54个C++源文件、52个头文件、6个...
###简介: TeamTalk是一套开源的企业办公即时通讯软件,作为整套系统的组成部分之一,TTServer为TeamTalk 客户端提供用户登录,消息转发及存储等基础服务。...DBProxy (JAVA): 数据库代理服务器,提供mysql以及redis的
4. TTServer-master:这是服务端的源码,可能是用Java、Python、Go等后端语言实现。这部分代码涉及服务器架构设计,数据库操作,消息路由,用户认证,以及可能的负载均衡和安全性策略。理解这部分源码有助于学习大...
关于使用Key/Value数据库Redis和TTSERVER的心得体会,主要集中在Redis的特性和使用场景上。Redis是一个高性能的Key/Value存储系统,它与Memcached相似,但提供了更为丰富的数据结构和更强大的功能。 首先,Redis...
主要用于远程协助使用,比QQ远程协助速度更快,更好用一些。...若被协助方的‘被协助’按钮为灰色,请去掉后面‘自动连接’的勾,然后退出软件重新运行 ttserver.exe 输入验证码并点击被协助即可。
首先,我们要了解ttvnc2.2的两个核心组件:ttserver.exe和ttclient.exe。ttserver.exe是被控端程序,安装在需要被远程控制的计算机上。它的主要职责是监听网络连接,等待控制端的请求,并在接收到请求后提供远程桌面...
###项目背景 随着蘑菇街由导购向电商转型,蘑菇街自己的IM也应运而生,IM起初只是用于商家和 买家之间沟通的工具。后面我们问自己,既然已经有了用于客服的IM,为什么不自己 做一个IM,用于公司内部的沟通工具,来...
TTMobile 是一个专门为 Android 设计的应用程序,其主要功能是收集和存储用户的 GPS 轨迹数据,并将这些数据上传到服务器,该服务器通常被称为 TTServer。这个应用程序基于 Java 语言开发,Java 作为 Android 开发的...
远程控制软件在IT行业中扮演着重要的角色,尤其对于技术支持、协同工作和远程办公场景来说更是不可或缺。"ttvnc软件"就是这样一款强大的远程控制工具,它允许用户通过网络连接到另一台计算机,进行屏幕共享、键盘...