/**空闲处理,断开空闲的连接*/
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->last >= IDLE)
{
fprintf(stdout, "close %d for idle\n", client->fd);
remove_fd(client->fd, L);
}
}
}
/**绑定到lua环境的函数 _send(fd, s)
int _send(lua_State *L)
{
const char *s = lua_tostring(L, -1);
int fd = lua_tointeger(L, -2);
int ret, i, len;
len = strlen(s);
char res[len + 4];
//添加头
for(i = 0; i < 4; i++)
res[i] = (len >> (3 - i) * 8) & 0xff;
memcpy(res + 4, s, len);
len += 4;
//循环发送,直至完成,TODO 判断缓冲区是否可写
ret = send(fd, res, len, 0);
if(ret < 0)
{
remove_fd(fd, L);
return luaL_error(L, "error send");
}
else
{
len -= ret;
while(len > 0)
{
ret = send(fd, res + ret, len, 0);
len -= ret;
}
}
fprintf(stdout, "SEND: %s\n", s);
return 0;
}
/**绑定到lua的函数 _close(fd)*/
int _close(lua_State *L)
{
int fd = lua_tointeger(L, -1);
remove_fd(fd, L);
return 0;
}
分享到:
相关推荐
Linux网络编程(四)——epoll+多线程实现简单的聊天(linux 服务器端 windows客户端)
一个非常好的epoll+线程池服务器Demo
该源代码使用linux的网络IO多路复用模型epoll在建立tcpserver,对用队列来缓存请求,使用线程池来处理请求。
这是一个简单的web服务器利用Linux下的线程池技术和Epoll机制 简单粗略有不足的欢迎指导
C语言+epoll+线程池实现的聊天室.zip
epoll+多线程的例子,本例子还有压力测试。
本文目的是学习Nginx+Lua开发,nginx+lua还会带来什么优势: 1、减少一层转发 ,使用其他服务语言来开发服务,肯定会使用一种协议在nginx和服务端直接进行通信。比如cgi、fcig、wsgi等。如果使用lua,因为lua是直接...
Lua的epoll模块 更多细节,请查看sample.lua API: ok,err=epoll.setnonblocking(fd) 设置一个文件描述符非阻塞。 epfd,err=epoll.create() 创建一个 epoll 文件描述符。ok,err=epoll.register(epfd,fd,event...
http_serverlinux下c语言版基于epoll+reactor模式的http文件下载服务器linux下c语言版基于epoll+reactor模式的http文件下载服务器linux下c语言版基于epoll+reactor模式的http文件下载服务器linux下c语言版基于epoll+...
内容摘要:使用“epoll+线程池”技术,通过makefile管理的简单项目——“服务器与客户端完成通信并处理小型业务” 技术涉及:网络初始化、epoll模型、线程池、线程同步、互斥锁 适用人群:在校大学生,并对网络通信...
提到高并发或者抗压力,有这种高qps经验的同学第一反应大都是Nginx+lua+Redis,网上也满天非那种高并发架构方案大都是这种,但是Nginx+lua来做接入层到底是怎么抗住压力的呢?本篇顺序:1、Nginx如何抗住的高并发,...
基于C++使用 epoll + threadpool 实现的 webServer,支持GET、POST.zip
1.一个服务器程序能够同时接受多个客户端程序发送的数据,同时支持的客户端数量不少于100个; 2.客户端向服务器发送的数据内容是:自己的进程ID,以及文件data.txt中的内容,自己创建这个文件,内容随意; 3....
Linux + C + Epoll实现高并发服务器,运用线程池技术。
客户端涉及到的技术点:常用QT控件(QWidget, QListWidget, QLabel, QPushButton)、QT信号与槽、QJsonObject完成json数据的解析、QT多线程、QTcpSocket连接服务器、服务端涉及到的技术点; epoll多路IO转接机制:常用...
论述了在linux平台上一中搞笑的IO方法 epoll, 正对网路欧游戏中大量并发客户请求的问题,提出采用epoll机制建立高效网络游戏服务器思想
linux下完整的epoll多线程高并发服务器代码
linux epoll服务器+windows 客户端 socket tcp通信的例子.zip
linux下服务器的搭建,socket+epoll模型+线程池+心跳检测+工厂模式;内含客户端的测试