/**处理请求数据,调用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 = read(fd, buf, READ_SIZE);
//连接关闭
if(ret == 0 || (ret < 0 && ret != EAGAIN))
remove_fd(fd, L);
else
{
//完全读取
do
{
//消息过长
done += ret;
if(done >= READ_SIZE)
{
remove_fd(fd, L);
return;
}
memcpy(client->read + client->read_len, buf, ret);
client->read_len = done;
}
while((ret = read(fd, buf, READ_SIZE)) > 0);
//处理消息头,前4字节表示长度
if(client->data_len == 0 && client->read_len >= 4)
{
int i;
for(i = 0; i < 4; i++)
client->data_len = (client->data_len << 8) | client->read[i];
}
//消息完整 TODO 客户端粘包处理
if(client->data_len + 4 == client->read_len)
{
client->read[client->read_len] = '\0';
//调用lua处理请求
lua_State *Lx = lua_newthread(L);
lua_getglobal(Lx, F_ONREAD); //lua里onread函数
lua_pushinteger(Lx, fd);
lua_pushstring(Lx, client->read + 4);
ret = lua_pcall(Lx, 2, LUA_MULTRET, 0);
if(ret != 0)
fprintf(stderr, "%s\n", lua_tostring(Lx, -1));
lua_settop(L, 0);
//处理完成
client->data_len = client->read_len = 0;
//重置最后访问时间
client->last = now();
}
}
}
分享到:
相关推荐
《Lua游戏服务器框架开源源码——crossover深度解析》 Lua,这门轻量级的脚本语言,因其简洁高效、易于嵌入的特点,在游戏开发领域尤其是服务器端得到了广泛应用。crossover,作为一款基于Lua的游戏服务器框架,为...
**四、Lua在Nginx中的应用** 1. **动态响应处理**:通过Lua脚本,Nginx可以在接收到请求后动态生成响应,无需依赖后端应用服务器。 2. **API接口**:OpenResty可以方便地构建RESTful API,实现JSON数据的接收和...
cpp-silly是一个基于Lua的轻量级服务器框架,它的设计目标是为开发者提供一个易于使用且性能优秀的服务器程序开发平台。这个框架的核心特点是利用了Lua的脚本语言特性,允许开发者快速编写业务逻辑,同时结合C/C++的...
`silly`不仅提供了WebSocket服务器的实现,还支持创建WebSocket客户端,这使得实时交互应用如在线游戏、聊天室等开发变得简单。 5. **Epoll与Kevent**: 对于高并发场景,`silly`利用了Linux内核的Epoll(Event ...
《基于Lua的分布式游戏服务器引擎框架——Quanta Master深度解析》 在当今的网络游戏领域,高效、稳定且可扩展的游戏服务器引擎是至关重要的。Quanta Master,作为一个基于Lua的分布式游戏服务器引擎框架,为游戏...
rAthena是一款开源、跨平台的MMORPG(大型多人在线角色扮演游戏)服务器,它为开发者提供了构建和维护网络游戏的强大框架。这款服务器软件以其高度可定制性、灵活性和稳定性而受到社区的广泛欢迎。rAthena基于C++...
epoll原理与实战.pptx Lua分享.pptx Mastering Nginx - PP 2013.pdf MongoDB权威指南.pdf nginx.conf nginx共享内存.doc nginx核心讲解.pdf Nginx高性能Web服务器详解.pdf NGINX高性能WEB服务器详解_PDF电子书下载 ...
它展示了如何利用现代操作系统提供的工具(如epoll)和脚本语言(如Lua)来构建一个高效且可定制的服务端解决方案。开发者可以通过阅读和分析源代码来学习多线程编程、I/O多路复用、以及C与Lua之间的接口设计等高级...
在描述中提到了多种架构和组件,例如脚本语言如Lua和Python,它们在服务器开发中常用于编写灵活和高效的控制逻辑。ACE的mpc和Gnu autoconf则用于自动化构建和配置工程文件。内核应用如Tux和LVS用于负载均衡,...
- **网络依赖性低**:Nginx可以实现简单的负载均衡策略,只需要能够与目标服务器通信即可。 - **内置服务器检测**:Nginx能够自动检测后端服务器的健康状况,如果检测到某个服务器出现故障,则可以将请求重定向到...
这些脚本可能用各种编程语言编写,如Lua、Python或C#,并由游戏引擎支持。 2. **网络体系结构**:网络游戏的网络体系结构设计是确保多玩家同步、低延迟通信的关键。常见的架构有客户端-服务器(Client-Server)、...
Tengine基于Nginx的事件驱动模型构建,这种模型采用非阻塞I/O多路复用技术,如epoll(Linux系统)或kqueue(FreeBSD系统)。这种架构使得Nginx能够处理大量并发连接,具有很高的性能和低资源消耗。Tengine继承了这...
《高级服务器设计和实现:架构、手段与工具箱》 在构建高效、稳定的高级服务器时,我们需要深入了解服务器架构、采用适当的手段和工具。本资料详尽地探讨了这一主题,旨在提供一个全面的指南,帮助IT专业人员优化...
lua脚本在服务器端执行,减少了网络往返,提高了性能。 二、客户端库的优化 1. **Jedis(Java客户端)**:Jedis在2.8之后的版本中,对上述新特性进行了全面支持,包括连接池、多路复用和lua脚本。此外,它还提供了...
* 第三方模块:第三方模块是为了扩展 Nginx 服务器应用,完成开发者自定义功能,如:Json 支持、Lua 支持等。 Nginx 多进程模型 Nginx 的多进程模型是指服务器每当收到一个客户端时,就有服务器主进程(master ...
Nginx采用非阻塞的事件处理机制,如epoll,能有效处理大量并发请求,减少对系统资源的需求。由于它不处理动态内容,而是将这些任务转发给其他服务器,如Apache,因此在处理静态内容时表现卓越。 【Tengine】Tengine...
5. Skynet核心模块的处理机制是通过一个数组来简单的管理服务模块,查询服务模块是否存在于数组中。 6. Skynet还负责启动节点服务,注册服务,并与远程节点进行消息通信。 7. 代码中包含了多个网络功能模块: - ...
`lua_need_request_body`、`lua_shared_dict`和`lua_package_path`等配置展示了如何集成Lua脚本以实现自定义的防火墙功能。 `server_names_hash_bucket_size`用于设置服务器名称哈希表的大小,以适应大量的服务器...
8. **Lua脚本支持**:通过mod_lua模块,Apache 2.4.39允许使用Lua语言编写服务器端脚本,提供了更多的灵活性和可扩展性。 9. **模块升级**:包括mod_deflate、mod_expires等在内的核心模块都进行了更新,以提供更好...
10. **第三方模块**:除了官方提供的模块,社区还开发了大量第三方模块,如mod_security提供Web应用防火墙功能,lua-nginx-module支持在Nginx中嵌入Lua脚本进行复杂逻辑处理。 总之,"nginx-1.16.0.zip"这个压缩包...