`
nkadun
  • 浏览: 54050 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论
文章列表
/**空闲处理,断开空闲的连接*/ void idle_fds(lua_State *L) { client_data *client; int i; long n; n = now(); //做fds和clients对应为了这里快一点(65535 vs 1000) for(i = 0; i < MAX_CLIENT; i++) { client = clients[i]; //超过一定的毫秒数即断开 if(client != NULL && n - client-> ...
/**处理请求数据,调用lua处理*/ void read_fd(int fd, lua_State *L) { //已超时移除 if(fds[fd] < 0) return; char buf[READ_SIZE]; int ret, idx, done; client_data *client; //得到连接信息 idx = fds[fd]; client = clients[idx]; //已读取的字节数 done = client->read_len; ret = ...
/**断开一个连接,移除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_pushinteger(Lx, fd); ret = lua_pcall(Lx, 1, LUA_MULTRET, 0); if(ret != 0) fprintf(stderr, "%s\n", lua_t ...
/**取得当前毫秒数*/ long now() { struct timeval t; gettimeofday(&t, NULL); return t.tv_sec * 1000 + t.tv_usec / 1000; } /**将一个文件描述符添加到epoll监听, common:是否为客户端连接(相对于监听sock)*/ void add_fd(int fd, boolean common) { if(common) { int idx; //查找可用的位置(NULL) for(idx = 0 ...
边学习C语言边写个简单的游戏服务器玩。 --epoll监听读事件 --利用epoll_wait的timeout做idle处理 --数组下标索引客户端连接数据(没找到好用的hashmap库) --json作为数据交互格式 --luajson luapgsql /**客户端连接结构体*/ typedef struct client_data { int fd; int read_len; int data_len; char read[READ_SIZE]; long last; } client_data; int epollfd; //epoll文件描 ...
1、看一下/etc/default/saslauthd里,一般都会告诉你针对Postfix的OPTIONS配置,改一下; 2、确认smtpd启动时是否chroot,与saslauthd配置相符,在/etc/postfix/master.cf里改一下; 3、如果没有/etc/postfix/sasl/smtpd.conf,建一个,内容如下: pwcheck_method: saslauthd mech_list: PLAIN LOGIN 4、配置postfix验证设置,vi /etc/postfix/main.cf smtpd_sasl_auth_enable = yes smtpd_sas ...
没有一种技术可以完美地解决所有问题,有时候折衷一下,会取得更好的效果. 在做技术的时候,我们往往很死心眼,对技术热情越高,这种死心眼越严重.往往一个需求提出来,技术人员便寻找各种解决办法,肝脑涂地也再所不惜.当然,这是一个非常好的做技术的态度,但当我们用尽了各种途径去验证,最后得到的结果是"没有办法达到预期结果"的时候,何不尝试变通的做法,比如跟需求人员讨论小小地改变一下,或者用一种看上去很"垃圾"的设计? 折衷不代表应付,这两个词的出发点就是不同的,不热爱技术的一般靠应付来"完成"任务,而折衷是无可奈何而为之. 经验越丰富,越容 ...
做社区网页游戏开发的,以前粗浅地用过voldemort、cassandra、memcachedb,发现在要求较高的一致性方面,上述几种都不能很好地满足;直到发现Oracle NoSQL Database后,它有一些很好用的特性,比如: 1、同分区的事务保证 2、范围查询 3、各种原子操作方法 经过一番挣扎,决定在新游戏中采用它作为key-value存储,用于处理读写频繁的碎片数据。 在开发过程中有一些个人总结吧: 1、对于需要列表的数据,利用keyrange查询功能对原始数据做索引; 2、切记序列操作中的回滚选项; 3、做好key的管理和文档,不然大量key让后来的维护变得艰难; 4、不 ...
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 statement that returns nothing, such as a DDL statement. Returns: either (1) the row count for INSERT, U ...
做程序的大部分都有追求完美的心态,大牛们尤其是~ 大牛们的回复有时候比较激愤,主要是对现有框架的,不是针对提问者的,所以不用回喷,其实大牛们还是愿意帮助后进生的; 再谈框架,框架并不是不好用,不能用,但我觉得我等要真正了解http、servlet/jsp、jdbc之后再用框架比较好,这样就知道为什么大牛们会喷这些框架了,哈哈 个人觉得做程序的一般什么经历这样的过程: 1、无框架,堆出一个产品来,兴奋不已 2、仅会使用框架,不明白其原理,看着结构化的代码兴奋不已 3、了解原理,改进别人的框架,一边喷着一边兴奋不已 4、搞出个自己的框架,四处炫耀,兴奋不已 5、觉得自己知道的太少了,一边学习一边 ...
1、数据库性能的提升 再好的代码和数据库设计对性能的提升都是有限的,当然,不是说数据库优化不重要,而且说当数据库优化的成本很高或很难再优化时,加几条几百块钱的内存可能来的更有效。 2、多种存储并存 需要事务性、即时一致性高的数据用SQL数据库存储是最好的选择,对于那些重要性不高的数据,可以选择Key-Value存储; Key-Value存储的数据对于复杂的查询统计来说很难实现,可以借助数据转化(到SQL)之类的进行离线统计分析。 3、APP服务器很闲 一般来说,只要你不写死循环,APP服务器都会闲的蛋疼,所以有些数据处理工作可以从DB服务器转移到APP上来做,虽然DB上处理可能更方便(用一句 ...
刚发现有这个功能,原来一直在琢磨hibernate怎么实现而且防止并发的,原来是我土了…… //mysql CREATE TABLE foo(id INT NOT NULL AUTO_INCREMENT, name VARCHAR(16), PRIMARY KEY(id)); //java String sql = "INSERT INTO foo(name) VALUES(?)" PreparedStatement st = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); st.setStri ...
getColumnName returns the physical name of the column and getColumnLabel returns the *ALIAS*
3、以User为例进行CRU操作 Id.java //Model的父类,为了该死的JSTL我得加上get/set public abstract class Id<T extends Id<T>> { @EncDec public long id; public long id() { return id; } @SuppressWarnings("unchecked") public T id(long id_) { id = id_; return (T)this; } publi ...
2、IOC、AOP及请求处理 ServiceHandler.java//负责处理WAP请求分发和初始化存储 public class ServiceHandler { //URI缓存 private ConcurrentHashMap<String, ServiceInfo> infos = new ConcurrentHashMap<String, ServiceInfo>(128, 0.8f, 32); private Container container; public void init(StoreRepository repository ...
Global site tag (gtag.js) - Google Analytics