Http服务器-第五步加入lua来编写动态网页

原创
2016/09/14 12:35
阅读数 1.5K

原打算加入php支持,遇到了点小问题,因此打算用lua来编写动态网页

基本原理:通过分析url请求,吧请求参数传递给lua处理,lua返回处理后的数据,然后C++端返回给浏览器

ScriptCore.cpp





#include "ScriptCore.h"
#include <string>
#include <iostream>
#include <vector>
#include "Defs.h"
#include <mutex>
using namespace  std;

static std::mutex _script_mutex;


std::string  ScriptCore::exec(std::string file, std::string param)
{
///	std::lock_guard<std::mutex> locker(_script_mutex);

//	luaL_dostring(l, "print(\" hello lua\")");


//	return  "HttpHandler";


	int top = lua_gettop(l);



	lua_getglobal(l, "HttpHandler"); // get   Interface in lua




	//parse param ,  as "name=5" will be push
	int p,len = 0;

	vector<string> params;

	do
	{
 
		p = param.find("&");
		if (p == string::npos)
		{
			params.push_back(param);
			break;
		}
		else
		{
			string sub = param.substr(len, p);
			param = param.substr(p + 1, -1);
			params.push_back(sub);
		}
	} while (true);


	//push param to stack
	lua_pushstring(l,file.c_str());

	for (auto &s : params)
	{
		lua_pushstring(l, s.c_str());
	}


	lua_call(l, params.size()+1, 1);
	std::string ret = lua_tostring(l, lua_gettop(l));
//	lua_pop(l, 1);
	lua_settop(l, top);

	return ret;

	return  "ScriptCore.h";
}
ScriptCore::ScriptCore()
{
	this->initLua();
}

ScriptCore::~ScriptCore()
{
	lua_close(l);

}

ScriptCore* ScriptCore::getInstance()
{
	static ScriptCore*ins = nullptr;
	if (ins == nullptr)
	{
		ins = new ScriptCore;
	}
	return ins;
}


void ScriptCore::initLua()
{
	l = lua_open();
	luaL_openlibs(l);

	luaL_dofile(l, "HttpHandler.lua");

}

 

服务配置文件 server_config.lua

--配置服务类型和关联的lua script

local t={};

t["get"]="script/get";
t["login"]="script/login";
t["MsgBoard"]="script/MsgBoard";

return t;

 

登陆服务 login.lua



local t={};

function t:doRequest(p)
	
	return   " login succ   "  .. p["name"]  

end

return t;

 

运行结果

这样就能用lua 像用 php jsp 之类的来写动态网页了,实现自己的http服务,

当然还要提供一些C++接口给lua 比如SQL 等服务

展开阅读全文
Lua
0
1 收藏
分享
加载中
更多评论
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部