当前位置: 首页 > news >正文

河南平台网站建设哪里有网络营销知名企业

河南平台网站建设哪里有,网络营销知名企业,美工招聘信息,青岛网站建设小公司需求背景 一个服务缓存玩家信息到对象里,通过对象的函数定时同步到数据库中,如果玩家掉线 清空对象,但是后续步骤导致对象数据需要变更,对象不存在, 就不方便变更了,怎么处理? 方案思考 1.临…

需求背景

一个服务缓存玩家信息到对象里,通过对象的函数定时同步到数据库中,如果玩家掉线 清空对象,但是后续步骤导致对象数据需要变更,对象不存在, 就不方便变更了,怎么处理?

方案思考

1.临时新建对象

既然更新数据依赖对象,判断对象不存在的时候,先新建对象,再使用对象操作。

2.延后处理

判断对象不存在的时候,先记录函数名和参数,等对象下次出现的时候,延后调用。

方案选择

因为项目中使用的对象涉及到网络,玩家掉线情况下,参数不全,无法新建对象,所以选延后处理的方案比较合适。

具体代码

demo
  • 先看一个demo
local myFunction2 = function(arg1, arg2, arg3)print(arg1, arg2, arg3)
endlocal myFunction = function(arg1, arg2, arg3)local t = {arg1, arg2, arg3}local args = table.pack(arg1, arg2, arg3)myFunction2(table.unpack(args))
endmyFunction("hello", 42, {a = 2, b = 3})
  • 可以通过 table.pack将参数保存到table里,要使用的时候,再table.unpack使用。
  • 序列化的话,可以用cjson.encode
第一版
-- 导入 lua-cjson 库
local cjson = require("cjson")-- 定义一个要序列化的函数
local myFunction = function(arg1, arg2, arg3)print(arg1, arg2, arg3)
end-- 定义函数的参数
local args = {1, "hello", {a = 2, b = 3}}-- 序列化函数和参数
local serializedData = cjson.encode({func = myFunction, args = args})-- 打印序列化后的数据
print(serializedData)
-- 导入 lua-cjson 库
local cjson = require("cjson")-- 被序列化的数据
local serializedData = '{"func":null,"args":[1,"hello",{"a":2,"b":3}]}'-- 反序列化数据
local data = cjson.decode(serializedData)-- 获取函数和参数
local myFunction = data.func
local args = data.args-- 执行函数
if type(myFunction) == "function" thenmyFunction(unpack(args))  -- 使用 unpack 将参数展开传递给函数
elseprint("Invalid function.")
end

序列化之后可以存入redis,我这里使用的是redis的list。

其他

  • 实际使用过程中碰到一些问题,比如 cjson.encode 的时候报错 Cannot serialise table: excessively sparse array,原因是实际业务的args过于复杂。

这个错误通常发生在你尝试使用 cjson.encode 函数序列化一个 Lua 表时,而这个表包含了“过于稀疏”的数组部分。所谓“过于稀疏”是指数组中存在很多 nil 元素,而 cjson 在序列化时对这样的数组处理有一些限制。

  • 查了一些解决方案,最后使用的是
cjson.encode_sparse_array(true)
  • 使用上面方案之后,unpack(args)又异常了。于是调整代码。
local serializedData = cjson.encode({func = myFunction, args = {arg1, arg2, arg3})-- ... 此处省略中间过程local data = cjson.decode(serializedData)
if data.func and self[data.func] thenlocal args = data.args or {}self[data.func](self, args[1], args[2], args[3], args[4], args[5], args[6], args[7])end
end
  • 因为是通用方案,所以参数支持到7位,一般lua函数参数一般不会有这么多,实在超了,只能再加了。
http://www.hrbkazy.com/news/51028.html

相关文章:

  • 网站虚拟空间作用网络推广外包怎么样
  • 有没有专门做牛仔的网站全网营销国际系统
  • wordpress手机登录seo搜索引擎优化工资薪酬
  • 马鞍山市住房城乡建设委官方网站电商自学网
  • 小程序是怎么制作出来的seo模拟点击有用吗
  • 柳州网站开发关键词优化排名软件哪家好
  • 最新任免名单最新移动网站如何优化排名
  • 无锡网络公司网站建设国际实时新闻
  • 南宁网站建设公司排名日本搜索引擎
  • 模板网站有利于优化广州推广优化
  • 游戏平台网站制作大连网站建设费用
  • 门户网站开发项目的风险北京网络推广公司
  • 做视频推广有哪几个网站百度法务部联系方式
  • 沈阳做网站的公司排名免费网站站长查询
  • 怎样做自己的小说网站企业推广策划书
  • 品牌网站要这么做网易游戏推广代理加盟
  • 做网站推广业务怎么样站长之家收录查询
  • 政府网站免费模板psd百度网讯科技客服人工电话
  • 关于集团网站建设的网站推广的常用方法有哪些?
  • 家政服务网站做推广有效果吗上热门最火标题
  • 可以做富集分析的网站西安seo网站建设
  • 南通网站排名优化报价爱战网关键词查询网站
  • 建设网站可选择的方案有百度seo快速提升排名
  • 大网站整站备份seo研究中心论坛
  • 酒类做网站搭建一个网站的流程
  • 用邮箱地址做网站域名好吗济南网站建设公司选济南网络
  • 成都网站制作设计魔贝课凡seo
  • 手机里面的网站怎么制作外贸网站制作
  • 浙江 网站建设天津优化代理
  • 自助建站凡科网杭州网站seo公司