sniperhw / chuck Goto Github PK
View Code? Open in Web Editor NEWhigh performance and easily use asynchronous network library for C/Lua
high performance and easily use asynchronous network library for C/Lua
//if push success,return the new size,else return -1
static inline size_t chk_list_pushback(chk_list *l,chk_list_entry *n) {
if(n->next) return chk_error_common;
if(0 == l->size) l->head = l->tail = n;
else {
l->tail->next = n; //这个尾指针的next,不应该是null吗,为何还是自己?
l->tail = n;
}
++l->size;
return chk_error_ok;
}
如果成功返回new size;未返回,实际返回chk_error_ok; 如果失败,返回的chk_error_common 是 1, 也不是-1
我现在的gameserver,里面有一个tcpserver,一个httpserver,一个redisclient,三个公用一个event_loop
那么minilumen/sched.lua代码 里面用的event_loop是new了一个。这个是 需要改成上面 公用的那个event_loop吗??
redis,tcp,http的server,是公用一个event_loop, 还是 每个都单独new一个好?
local chuck = require("chuck")
local signal = chuck.signal
local signaler = signal.signaler(signal.SIGINT)
--- 不register to engine ,gc的时候会段错误
static int32_t lua_signaler_gc(lua_State L)
{
signaler *s = lua_tosignaler(L,1);
LOCK();
signalers[s->signum] = NULL;
UNLOCK();
release_luaRef(&s->luacallback); -> 这里应该加个判断
close(cast(handle,s)->fd);
return 0;
}
//fix 不一定非要执行吧,有时候这东东并没有被register.
if(s->callback){
release_luaRef(&s->luacallback);
}
可以说和node差不多吗?除了语言是lua
现实中mysql一般是数据库选型首选,看你的代码是单线程,加入mysql不是很好处理。你有支持的计划吗?或者提供下设计思路
void stream_socket_init(stream_socket_ *s,int32_t fd)
{
s->on_events = on_events; ---->
s->imp_engine_add = imp_engine_add; ---->
s->type = STREAM;
s->fd = fd;
s->on_events = on_events; ----> 又来一次。
s->imp_engine_add = imp_engine_add; ---->
s->status = SOCKET_READABLE | SOCKET_WRITEABLE;
easy_close_on_exec(fd);
}
lua: error loading module 'chuck' from file './lib/chuck.so':
./lib/chuck.so: undefined symbol: lua_tointegerx
编译完了,运行报错,不知道什么原因
在lua注册上beforecall, aftercall,errcall
当执行事件的时候去调用
local emitter_task = new_task(function() ...... end),不用调用emitter_task:run() 或者 sched.run(emitter_task ) 定时器就已经开始执行了,在new_task中 new_tasks[taskd] = true 这一步已经做了
run这个api 是不是应该是这样的
M.run = function ( task, ... )
local taskd
if type(task)=='function' then
taskd = new_task( task )
else
taskd = task
end
new_tasks[taskd] = true;
return taskd
end
把new_tasks[taskd] = true 这行代码 从new_task中移除 加入到 run中 是不是更合适?
我把工程 放到IDE里开发,
__thread 总是报错,找不到; 不知道该 怎么引用
网上也搜不到这个在哪里。
不知道该怎么查
大神,什么时候有空,写个类似Survive的例子;
用minilumen+gameserver,结合起来。
./lib/http.lua
line135: local ret = o.conn:Bind(eventLoop,function (httpPacket)
--没有Bind这个函数,我看 改成 Start 了。
testtimer.c
line15: chk_timer t = ((chk_timer)ud); //
对应line72-74:
chk_timer *t1,*t2,*t3,*t4,*t5,*t6,*t7,*t8,*t9;
chk_timermgr *m = chk_timermgr_new();
t1 = chk_timer_register(m,1,cb,&t1,tick); // 这里 为什么用&, 而不直接传t1,对应上面line15,chk_timer t = (chk_timer)ud; 写成这样。 没想明白,请教
uint64_t chk_tmer_inctick(uint64_t tick); // 这里 timer,有个拼写错误,写成tmer
sandy@sandy:~/Documents/chuck$ lua test/lua/httpclient.lua
[ ERROR]2017-02-04-21:29:26.182[3626] dail_ip4_cb():luabind/socket.h:193:error on dail_ip4_cb ./lib/http.lua:135: attempt to call a nil value (method 'Bind')
stack traceback:
./lib/http.lua:135: in field 'new'
./lib/http.lua:278: in function <./lib/http.lua:272>
[C]: in method 'Run'
test/lua/httpclient.lua:45: in main chunk
[C]: in ?
lua: test/lua/pbserver.lua:4: module 'protobuf' not found:
no field package.preload['protobuf']
no file './lib/protobuf.lua'
no file './lib/protobuf.so'
stack traceback:
[C]: in function 'require'
test/lua/pbserver.lua:4: in main chunk
[C]: in ?
已经make啦 lib下边只有http.lua chuck.so
RPC的封装 没有看到在哪
httpclient 如何实现 超时回应?
请求http时,怎么加上一个timeout超时?
({int __result; \
do __result = __sync_val_compare_and_swap(PTR,OLD,NEW) == OLD?1:0; \
while(0); \
__result;})
可以直接修改为
__sync_bool_compare_and_swap((PTR),(OLD),(NEW))
欢乐互动怎么办,不兼容重写吗?
他们用chuck做了哪个项目上线呢?
chk_list.h
static inline chk_list_entry *chk_list_end(chk_list *l) {
return NULL; //这个end,不是l->tail? 为何是NULL?
}
chk_util.h
#ifndef TEMP_FAILURE_RETRY
#define TEMP_FAILURE_RETRY(expression)
({ long int __result;
do __result = (long int)(expression);
while(__result == -1L&& errno == EINTR);
__result;}) //这个地方,单独一个__result干什么的? 不是return ??
#endif
是否应该是
calloc(1,sizeof(_w)+wheel_size(type)_sizeof(dlist));
现在只有一个 异步回调返回结果。
要是同步得到结果的,怎么实现?
static inline int32_t reader_check_size(buffer_reader *reader,uint32_t size)
{
uint32_t tmp = reader->pos + size;
return reader->cur->size >= tmp && tmp > size;
}
初始化的时候reader->pos为0,是不是应该是 tmp>=size ?
return reader->cur->size >= tmp && tmp >= size;
问一下;
我连续 调用 send;发送的消息,会被合并成一个 data,发送出去;这样接收端,按照单个来解析,就判断出错。
怎么让 调用send,立即发送。而不是合并一起发送?
minilumen中的任何一个例子 跑起来后 Ctrl + C中断程序 报错
https://github.com/xopxe/lumen 这里边不会
看了作者是改了 idle 的代码,不知道作者改这个api的意图 为啥不沿用原作者的
没有encoder? 数据都是直接发的? 没有+头+长度?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.