<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[java，objot，qutum，坚持！]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/nkadun</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; nkadun]]></copyright><item><title><![CDATA[epoll + lua 简单游戏服务器（五）]]></title><link>https://blog.youkuaiyun.com/nkadun/article/details/84482283</link><guid>https://blog.youkuaiyun.com/nkadun/article/details/84482283</guid><author>nkadun</author><pubDate>Mon, 23 Sep 2013 16:07:43 +0800</pubDate><description><![CDATA[[code=&quot;c&quot;]
/**空闲处理，断开空闲的连接*/
void idle_fds(lua_State *L)
{
	client_data *client;
	int i;
	long n;
	n = now();

        //做fds和clients对应为了这里快一点（65535 vs 1000）
	for(i = 0; i &lt; MAX_CLIENT; i++)...]]></description><category></category></item><item><title><![CDATA[epoll + lua 简单游戏服务器（四）]]></title><link>https://blog.youkuaiyun.com/nkadun/article/details/84482282</link><guid>https://blog.youkuaiyun.com/nkadun/article/details/84482282</guid><author>nkadun</author><pubDate>Mon, 23 Sep 2013 16:07:27 +0800</pubDate><description><![CDATA[[code=&quot;c&quot;]
/**处理请求数据，调用lua处理*/
void read_fd(int fd, lua_State *L)
{
	//已超时移除
	if(fds[fd] &lt; 0)
		return;

	char buf[READ_SIZE];
	int ret, idx, done;
	client_data *client;
        
        /...]]></description><category></category></item><item><title><![CDATA[epoll + lua 简单游戏服务器（三）]]></title><link>https://blog.youkuaiyun.com/nkadun/article/details/84482281</link><guid>https://blog.youkuaiyun.com/nkadun/article/details/84482281</guid><author>nkadun</author><pubDate>Mon, 23 Sep 2013 16:07:11 +0800</pubDate><description><![CDATA[[code=&quot;c&quot;]
/**断开一个连接，移除epoll监听，通知lua*/
void remove_fd(int fd, lua_State *L)
{
	int ret, idx;
	lua_State *Lx = lua_newthread(L);
	lua_getglobal(Lx, F_ONCLOSE); // 调用lua里的onclose函数
	lua_pushinteg...]]></description><category></category></item><item><title><![CDATA[epoll + lua 简单游戏服务器（二）]]></title><link>https://blog.youkuaiyun.com/nkadun/article/details/84482280</link><guid>https://blog.youkuaiyun.com/nkadun/article/details/84482280</guid><author>nkadun</author><pubDate>Mon, 23 Sep 2013 16:06:53 +0800</pubDate><description><![CDATA[[code=&quot;c&quot;]
/**取得当前毫秒数*/
long now()
{
	struct timeval t;
	gettimeofday(&amp;t, NULL);
	return t.tv_sec * 1000 + t.tv_usec / 1000;
}
[/code]

[code=&quot;c&quot;]
/**将一个文件描述符添加到epoll监听, common：是否为客户端连接（相对于...]]></description><category></category></item><item><title><![CDATA[epoll + lua 简单游戏服务器（一）]]></title><link>https://blog.youkuaiyun.com/nkadun/article/details/84482279</link><guid>https://blog.youkuaiyun.com/nkadun/article/details/84482279</guid><author>nkadun</author><pubDate>Mon, 23 Sep 2013 16:06:25 +0800</pubDate><description><![CDATA[边学习C语言边写个简单的游戏服务器玩。

--epoll监听读事件
--利用epoll_wait的timeout做idle处理
--数组下标索引客户端连接数据（没找到好用的hashmap库）
--json作为数据交互格式
--luajson luapgsql

[code=&quot;c&quot;]
/**客户端连接结构体*/
typedef struct client_data
{
	in...]]></description><category></category></item><item><title><![CDATA[Postfix + SASL配置要点]]></title><link>https://blog.youkuaiyun.com/nkadun/article/details/84388148</link><guid>https://blog.youkuaiyun.com/nkadun/article/details/84388148</guid><author>nkadun</author><pubDate>Fri, 01 Feb 2013 10:50:58 +0800</pubDate><description><![CDATA[1、看一下/etc/default/saslauthd里，一般都会告诉你针对Postfix的OPTIONS配置，改一下；

2、确认smtpd启动时是否chroot，与saslauthd配置相符，在/etc/postfix/master.cf里改一下；

3、如果没有/etc/postfix/sasl/smtpd.conf，建一个，内容如下：
pwcheck_method: saslau...]]></description><category></category></item><item><title><![CDATA[关于折衷]]></title><link>https://blog.youkuaiyun.com/nkadun/article/details/84360049</link><guid>https://blog.youkuaiyun.com/nkadun/article/details/84360049</guid><author>nkadun</author><pubDate>Fri, 23 Nov 2012 14:06:33 +0800</pubDate><description><![CDATA[没有一种技术可以完美地解决所有问题,有时候折衷一下,会取得更好的效果.

在做技术的时候,我们往往很死心眼,对技术热情越高,这种死心眼越严重.往往一个需求提出来,技术人员便寻找各种解决办法,肝脑涂地也再所不惜.当然,这是一个非常好的做技术的态度,但当我们用尽了各种途径去验证,最后得到的结果是&quot;没有办法达到预期结果&quot;的时候,何不尝试变通的做法,比如跟需求人员讨论小小地改变一下,或者用一种看上去很...]]></description><category></category></item><item><title><![CDATA[Oracle NoSQL Database最近使用的一些小心得]]></title><link>https://blog.youkuaiyun.com/nkadun/article/details/84210714</link><guid>https://blog.youkuaiyun.com/nkadun/article/details/84210714</guid><author>nkadun</author><pubDate>Fri, 27 Apr 2012 20:53:12 +0800</pubDate><description><![CDATA[做社区网页游戏开发的，以前粗浅地用过voldemort、cassandra、memcachedb，发现在要求较高的一致性方面，上述几种都不能很好地满足；直到发现Oracle NoSQL Database后，它有一些很好用的特性，比如：

1、同分区的事务保证
2、范围查询
3、各种原子操作方法

经过一番挣扎，决定在新游戏中采用它作为key-value存储，用于处理读写频繁的碎片数据。...]]></description><category></category></item><item><title><![CDATA[关于jdbc executeUpdate的返回值]]></title><link>https://blog.youkuaiyun.com/nkadun/article/details/84161911</link><guid>https://blog.youkuaiyun.com/nkadun/article/details/84161911</guid><author>nkadun</author><pubDate>Fri, 02 Mar 2012 11:34:35 +0800</pubDate><description><![CDATA[java api里是这样说的
executeUpdate
int executeUpdate() throws SQLException
Executes the SQL statement in this PreparedStatement object, which must be an SQL INSERT, UPDATE or DELETE statement; or an SQL ...]]></description><category></category></item><item><title><![CDATA[其实大牛们都是挺友善的]]></title><link>https://blog.youkuaiyun.com/nkadun/article/details/84149704</link><guid>https://blog.youkuaiyun.com/nkadun/article/details/84149704</guid><author>nkadun</author><pubDate>Tue, 07 Feb 2012 14:08:55 +0800</pubDate><description><![CDATA[做程序的大部分都有追求完美的心态，大牛们尤其是～
大牛们的回复有时候比较激愤，主要是对现有框架的，不是针对提问者的，所以不用回喷，其实大牛们还是愿意帮助后进生的；

再谈框架，框架并不是不好用，不能用，但我觉得我等要真正了解http、servlet/jsp、jdbc之后再用框架比较好，这样就知道为什么大牛们会喷这些框架了，哈哈

个人觉得做程序的一般什么经历这样的过程：
1、无框架，堆...]]></description><category></category></item><item><title><![CDATA[高性能的企业应用经验]]></title><link>https://blog.youkuaiyun.com/nkadun/article/details/84149683</link><guid>https://blog.youkuaiyun.com/nkadun/article/details/84149683</guid><author>nkadun</author><pubDate>Tue, 07 Feb 2012 13:42:53 +0800</pubDate><description><![CDATA[1、数据库性能的提升
再好的代码和数据库设计对性能的提升都是有限的，当然，不是说数据库优化不重要，而且说当数据库优化的成本很高或很难再优化时，加几条几百块钱的内存可能来的更有效。

2、多种存储并存
需要事务性、即时一致性高的数据用SQL数据库存储是最好的选择，对于那些重要性不高的数据，可以选择Key-Value存储；
Key-Value存储的数据对于复杂的查询统计来说很难实现，可以借助...]]></description><category></category></item><item><title><![CDATA[JDBC插入并返回自增长主键]]></title><link>https://blog.youkuaiyun.com/nkadun/article/details/83914813</link><guid>https://blog.youkuaiyun.com/nkadun/article/details/83914813</guid><author>nkadun</author><pubDate>Wed, 04 May 2011 01:59:48 +0800</pubDate><description><![CDATA[刚发现有这个功能，原来一直在琢磨hibernate怎么实现而且防止并发的，原来是我土了……

//mysql
[code=&quot;java&quot;]CREATE TABLE foo(id INT NOT NULL AUTO_INCREMENT, name VARCHAR(16), PRIMARY KEY(id));[/code]

//java
[code=&quot;java&quot;]String sql = ...]]></description><category></category></item><item><title><![CDATA[JDBC getColumnName vs getColumnLabel]]></title><link>https://blog.youkuaiyun.com/nkadun/article/details/83906036</link><guid>https://blog.youkuaiyun.com/nkadun/article/details/83906036</guid><author>nkadun</author><pubDate>Sun, 17 Apr 2011 17:03:43 +0800</pubDate><description><![CDATA[getColumnName returns the physical name of the column and getColumnLabel returns the *ALIAS*]]></description><category></category></item><item><title><![CDATA[<实践>Voldemort与Objot集成的WAP高性能方案与简单实现（三）]]></title><link>https://blog.youkuaiyun.com/nkadun/article/details/83533341</link><guid>https://blog.youkuaiyun.com/nkadun/article/details/83533341</guid><author>nkadun</author><pubDate>Sun, 24 Jan 2010 15:09:57 +0800</pubDate><description><![CDATA[3、以User为例进行CRU操作

Id.java //Model的父类，为了该死的JSTL我得加上get/set
[code=&quot;java&quot;]public abstract class Id {

	@EncDec
	public long id;

	public long id() {
		return id;
	}

	@SuppressWarnings(&quot;unche...]]></description><category></category></item><item><title><![CDATA[<实践>Voldemort与Objot集成的WAP高性能方案与简单实现（二）]]></title><link>https://blog.youkuaiyun.com/nkadun/article/details/83533338</link><guid>https://blog.youkuaiyun.com/nkadun/article/details/83533338</guid><author>nkadun</author><pubDate>Sun, 24 Jan 2010 15:03:22 +0800</pubDate><description><![CDATA[2、IOC、AOP及请求处理
ServiceHandler.java//负责处理WAP请求分发和初始化存储
[code=&quot;java&quot;]public class ServiceHandler {

//URI缓存
	private ConcurrentHashMap infos = new ConcurrentHashMap(128, 0.8f, 32);
	private Contai...]]></description><category></category></item><item><title><![CDATA[<实践>Voldemort与Objot集成的WAP高性能方案与简单实现（一）]]></title><link>https://blog.youkuaiyun.com/nkadun/article/details/83533335</link><guid>https://blog.youkuaiyun.com/nkadun/article/details/83533335</guid><author>nkadun</author><pubDate>Sun, 24 Jan 2010 14:45:31 +0800</pubDate><description><![CDATA[［摘要］

Voldemort：高性能、高扩展性、不错的一致性Key-Value集群方案，目前被LinkIn使用，与Dynamo思想类似，参见http://project-voldemort.com
Objot：面向服务的轻量级web开发库，参见http://objot.com

［目标］

搭建一个WAP游戏开发框架，利用烂服务器集群提供高性能，尽量保证游戏数据的一致性，并可根据负...]]></description><category></category></item><item><title><![CDATA[<插曲>目前对key-value分布式集群数据库的认识（继续坚持）]]></title><link>https://blog.youkuaiyun.com/nkadun/article/details/83532559</link><guid>https://blog.youkuaiyun.com/nkadun/article/details/83532559</guid><author>nkadun</author><pubDate>Thu, 21 Jan 2010 23:04:21 +0800</pubDate><description><![CDATA[通过论坛上大侠们的指点，以及跟“菜鸟”童鞋的交流，发现我原来的有些认识是错误的或有偏差的，如下：
1. 被cache所迷惑，误把distributed cache看成了distributed db，现在的理解是cache只是对db的增强（其实一直是这样，只是加上了个分布式就把我自己搞乱了）
2. 对cache进行事务处理，再由cache与storage同步是对事务的割裂，也就不能再称之为事务了...]]></description><category></category></item><item><title><![CDATA[ <第一周>key-value数据库集群的发现与思考（兼锻炼坚持能力）]]></title><link>https://blog.youkuaiyun.com/nkadun/article/details/83531966</link><guid>https://blog.youkuaiyun.com/nkadun/article/details/83531966</guid><author>nkadun</author><pubDate>Wed, 20 Jan 2010 22:17:52 +0800</pubDate><description><![CDATA[1. 目标是找到一种如下的key-value数据库集群方案：
- 具备高性能的读写，支持亿级PV
- 具备灵活的可扩展性，同时也是支持上一条的基础
- 数据自动切分，即不依赖于业务逻辑
- 具备分布式事务功能以及不同隔离级别
- 具备数据的一致性或局部一致，最终全部一致
- 可独立提供网络层服务，以支持N（数据库集群）*M（WEB集群）结构，并支持二进制的网络协议
- 方便的客户端A...]]></description><category></category></item><item><title><![CDATA[CentOS 5.2 上安装 Oracle 11g x64 非图形界面]]></title><link>https://blog.youkuaiyun.com/nkadun/article/details/83394637</link><guid>https://blog.youkuaiyun.com/nkadun/article/details/83394637</guid><author>nkadun</author><pubDate>Fri, 08 May 2009 11:00:52 +0800</pubDate><description><![CDATA[0、准备工作
最小化安装CentOS，即自定义并且勾掉所有的组件
目前机器的配置已经不需要修改系统参数。
/db分区是给oracle用的。

1.安装所需包
[code=&quot;java&quot;]binutils
compat-libstdc++
elfutils-libelf
elfutils-libelf-devel
gcc
gcc-c++
glibc
glibc-common...]]></description><category></category></item><item><title><![CDATA[基于Spring的Hibernate Search全文检索功能示例]]></title><link>https://blog.youkuaiyun.com/nkadun/article/details/83357265</link><guid>https://blog.youkuaiyun.com/nkadun/article/details/83357265</guid><author>nkadun</author><pubDate>Wed, 25 Feb 2009 13:35:27 +0800</pubDate><description><![CDATA[数据库：Oracle 9i
JDBC驱动：OJDBC14
开发环境：Eclipse-JEE
Spring版本：Spring 2.0.6
Hibernate版本：Hibernate Core 3.2.5/Hibernate Annotation 3.3.0/Hibernate Validator 3.0.0/Hibernate Search 3.0.0 Beta4

//jdbc.pro...]]></description><category></category></item></channel></rss>