profile
viewpoint
云风 cloudwu ejoy.com China http://blog.codingnow.com coder ( c , lua , open source )

cloudwu/coroutine 1525

A asymmetric coroutine library for C.

cloudwu/cstring 325

A simple C string lib

cloudwu/buddy 249

Buddy memory allocation

cloudwu/aoi 234

Area of Interest Library

cloudwu/battlearena 77

A experimental project for moba like game server

cloudwu/ameba 65

multithread for lua 5.2

cloudwu/bpa 64

A bump pointer allocator

cloudwu/datalist 59

A simple list data sheet

cloudwu/bgfx 58

Cross-platform, graphics API agnostic, "Bring Your Own Engine/Framework" style rendering library.

cloudwu/ejoy3d 52

Just a toy

issue commentcloudwu/skynet

clusterd服务突然生成大量clusteragent服务

一个连接一个,连接断开后销毁。

liqigit

comment created time in 3 days

issue closedcloudwu/skynet

网络层的一点优化,请求 review 。

这两天对网络层的写操作做了一点优化。具体见 blog https://blog.codingnow.com/2019/11/skynet_socket_rawpointer.html

其实是延续的 #646 ,新接口可以直接发送 lua string ,而省去一次内存拷贝。

如果没有自己写 C 服务直接调用 skynet_socket_send ,那么应该没有任何影响。如果有直接使用 skynet_socket_send 则可以考虑看能否使用新版本的 skynet_socket_sendbuffer 获得更好的性能。

希望有在用 skynet 的同学帮忙 review/test 这个分支 https://github.com/cloudwu/skynet/tree/sendbuffer 。

参考 #1108

cc @linxiaolong

closed time in 4 days

cloudwu

push eventcloudwu/skynet

Cloud Wu

commit sha 6de4a012a751d1f3b26f1c78e6072f7c99bf6805

fix #1154

view details

push time in 6 days

issue closedcloudwu/skynet

DebugConsole单步调试Call消息的一个报错

单步调试call过来的消息时,如果按c继续运行会报错,服务的代码如下:

local skynet = require "skynet"
local mode = ...
if mode == "slave" then -----------------------------------------

skynet.start(function()
    skynet.dispatch("lua", function(_,_, ...)
		skynet.fork(function()
			while true do
				skynet.sleep(10)
			end
		end)
		skynet.retpack(...)
	end)
end)

else ------------------------------------------------------------

skynet.start(function()
	skynet.newservice("debug_console",8000)
	local slave = skynet.newservice(SERVICE_NAME, "slave")
	while true do
		local msg = skynet.call(slave, "lua", "hello world")
		skynet.error(msg)
		skynet.sleep(100)
	end
end

在debugconsole调试slave,加它一个watch("lua"),断点下来后按c继续运行,会报:

[:0000000a] lua call [0 to :a : 56790 msgsz = 0] error : ./lualib/skynet.lua:642: ./lualib/skynet.lua:184: ./lualib/skynet.lua:439: No session
stack traceback:
        [C]: in function 'error'
        ./lualib/skynet.lua:439: in function 'skynet.ret'
        ./test/testvscdebug.lua:42: in upvalue 'dispatch'

看了一下remotedebug.lua的代码,似乎是因为coroutine.resume导致的,换成skynet.lua里面的coroutine_resume后正常。

closed time in 6 days

colinsusie

issue commentcloudwu/skynet

DebugConsole单步调试Call消息的一个报错

coroutine.resume 何时被替换掉的?

colinsusie

comment created time in 6 days

issue commentcloudwu/skynet

DebugConsole单步调试Call消息的一个报错

这个我没在用,既然可以修好,那么提个 pr :)

colinsusie

comment created time in 6 days

startedpezcode/Cluster

started time in 7 days

issue closedcloudwu/sproto

如果Sproto文件写错,如何报出哪行出错。

如题,有没有办法报出语法出错的行数。 不然实在很头痛。

closed time in 8 days

hataksumo

issue commentcloudwu/sproto

如果Sproto文件写错,如何报出哪行出错。

查看 error 信息:https://github.com/cloudwu/sproto/blob/master/sprotoparser.lua#L56

hataksumo

comment created time in 8 days

push eventcloudwu/skynet

zixun

commit sha 99d43388ab7e0976cba5ba486c9c997c29b1bc7f

fix handshake error

view details

push time in 10 days

PR merged cloudwu/skynet

fix handshake error

issue #1152 握手失败时应当触发close消息和关闭socket。

+2 -0

1 comment

1 changed file

lvzixun

pr closed time in 10 days

delete branch cloudwu/skynet

delete branch : fix1150

delete time in 10 days

push eventcloudwu/skynet

Cloud Wu

commit sha ac38fd620b64c67dc342e23d754b95eae0139592

see #1150

view details

push time in 10 days

PR merged cloudwu/skynet

see #1150
+2 -1

0 comment

1 changed file

cloudwu

pr closed time in 10 days

PR opened cloudwu/skynet

see #1150
+2 -1

0 comment

1 changed file

pr created time in 10 days

create barnchcloudwu/skynet

branch : fix1150

created branch time in 10 days

issue commentcloudwu/skynet

进程间集群通信,clusteragent内存泄漏

问题似乎出在这里

https://github.com/cloudwu/skynet/blob/master/service/clusteragent.lua#L84

这里的 msg,sz 替换了消息传入的 msg, sz 。但是消息传入的 msg,sz 会被框架释放,但这个不会。这里应该改用 skynet.packstring 。

lxqan2010

comment created time in 10 days

issue openedDanielChappuis/reactphysics3d

the levelFlag in class Destination is never used

https://github.com/DanielChappuis/reactphysics3d/blob/develop/src/utils/Logger.h#L328

levelFlag is stored on constructor, but never be used. I guess we should check this flag before Destination::write .

created time in 14 days

GollumEvent
GollumEvent
GollumEvent
GollumEvent

starteddfranx/ShaderDebugger

started time in 21 days

issue commentcloudwu/skynet

mysql为什么没有事务支持?

基本原则是,谁有需求谁来添加,欢迎 pr 。

stlnkm

comment created time in a month

startedDanielChappuis/reactphysics3d

started time in a month

push eventcloudwu/stellaris_cn

Cloud Wu

commit sha 00e5013e0de55ac1d4dceb980204d20269625055

add description

view details

push time in a month

push eventcloudwu/stellaris_cn

Cloud Wu

commit sha 9c1be4b834ad46442c8828a8077b16894eea350e

fix broken symbols

view details

push time in a month

push eventcloudwu/skynet

Cloud Wu

commit sha 409646a2401908d0c3c99aca1c4da218380dd67c

happy new year

view details

push time in a month

push eventcloudwu/skynet

Cloud Wu

commit sha da4360787f0d8a71f06dd85a35cbf615455c71c3

Improve socketchannel, try the next host in backup list when auth failed. See issue #1145

view details

push time in a month

delete branch cloudwu/skynet

delete branch : socketchannel

delete time in a month

PR merged cloudwu/skynet

Improve socketchannel

See issue #1145

改进 socket channel, 在 auth 失败后,会尝试连接 backup 列表(若提供)中下一个 host 。

之前的实现 socket channel 仅当连接主 host 失败后才尝试连接 backup 。

由于 socket channel 实现了这个特性, mongodb driver 就不必额外实现 pickserver 功能。在找不到主节点时,直接抛出 error 即可。

这个 patch 的主要改变是将原来的 connect_once 函数包装了一层,原来逻辑放在内部函数 _connect_once 中,包装层会复制一份 backup 列表,在 _connect_once 建立连接失败(包括 socket 建立失败,及 auth 过程发生 error )后,尝试列表中没有试过的 host 。

注: 如果 auth 过程主动调用 changehost ,而非抛出 error ,则会重试整个 connect_once 过程。

btw,这个 patch 改动并不太大。之所以 diff 看起来很复杂,是因为 _connect_once 相对 connect_once 改动了缩进层次。

+116 -106

13 comments

2 changed files

cloudwu

pr closed time in a month

PR closed cloudwu/skynet

timeout支持参数传递
+9 -2

1 comment

1 changed file

zero-rp

pr closed time in a month

pull request commentcloudwu/skynet

timeout支持参数传递

lua 对闭包支持非常完善,所以这种可以自己封装。

zero-rp

comment created time in a month

push eventcloudwu/roguestale_cn

Cloud Wu

commit sha 627f300e5cf28585a8e70f2caf19fc7de65b96f0

shorten

view details

push time in a month

push eventcloudwu/luareload

leinlin

commit sha 882597d2dd780b2f5b3c6253b0ea17f0fcba3e70

修复 local 函数 的upvalue无法更新的问题

view details

云风

commit sha aa5d170c613225493c544ff2ee498f9ae256aa45

Merge pull request #13 from ElPsyCongree/proto fix typo

view details

push time in a month

PR merged cloudwu/luareload

fix typo
+2 -2

0 comment

1 changed file

ElPsyCongree

pr closed time in a month

pull request commentcloudwu/luareload

修复 local 函数 的upvalue无法更新的问题

我的意思不是 setvalue 对不对,是问 join 为什么不对?如果没有问题,就应该尽量少做修改。

ElPsyCongree

comment created time in a month

Pull request review commentcloudwu/luareload

修复 local 函数 的upvalue无法更新的问题

 local function update_funcs(map, proto_map) 							if print then print("RESERVE upvalue", name, v) end 						else 							if print then print("REPLACE upvalue", name, v) end-							setupvalue(root, i, uv)+							setupvalue(root, i, nv)

这里看起来是 typo ,但上面一个 nv 也应该改过来。

ElPsyCongree

comment created time in a month

Pull request review commentcloudwu/luareload

修复 local 函数 的upvalue无法更新的问题

 local function patch_funcs(upvalues, map) 				local uv = upvalues[id] 				if uv then 					if print then print("JOIN", value, name) end-					debug.upvaluejoin(value, i, uv.func, uv.index)+                                        setupvalue(value, i, v)+					-- debug.upvaluejoin(value, i, uv.func, uv.index)

这里把前面 getupvalue(value,i) 的结果又 setupvalue(value,i,v) 意义何在?

ElPsyCongree

comment created time in a month

Pull request review commentcloudwu/luareload

修复 local 函数 的upvalue无法更新的问题

 local function update_funcs(map, proto_map) 							if print then print("RESERVE upvalue", name, v) end 						else 							if print then print("REPLACE upvalue", name, v) end-							setupvalue(root, i, uv)+							setupvalue(root, i, nv)

如果这里 uv 是 nv 的 typo, 那么上面 if uv then 也应该改?

ElPsyCongree

comment created time in a month

Pull request review commentcloudwu/luareload

修复 local 函数 的upvalue无法更新的问题

 local function patch_funcs(upvalues, map) 				local uv = upvalues[id] 				if uv then 					if print then print("JOIN", value, name) end-					debug.upvaluejoin(value, i, uv.func, uv.index)+                                        setupvalue(value, i, v)+					-- debug.upvaluejoin(value, i, uv.func, uv.index)

为什么不能用 upvaluejoin

ElPsyCongree

comment created time in a month

pull request commentcloudwu/skynet

Improve socketchannel

我觉得阿里云上的 mongo 集群之所以有这样的问题,可能是因为开放给你们的 ip 并不是 mongo 实际的服务,它只是一个代理。如果代理背后的真正服务挂了,表现出来就是可以建立连接(连上代理)却无法工作。

cloudwu

comment created time in a month

pull request commentcloudwu/skynet

Improve socketchannel

我怀疑是:你的集群 2 号节点已经下线,但端口还开着,并可以连上去,但不能行使 mongo server 的职责。如果有机会遍历到第 3 节点,根据 mongo 集群的协商规则,可能就把 2 号节点踢出列表,或换成了正确的新的 ip 。

但是之前的 socket channel 不能处理这种情况,遍历到 2 号时,成功建立了 socket 连接但无法把 mongo 握手做完,导致了不断从头尝试。

你可以根据以上的描述来模拟出错环境。(即把 2 号节点的 mongo 服务停掉,但开一个服务在同样的端口上,这个服务只要有人连上来就主动断开)

cloudwu

comment created time in a month

pull request commentcloudwu/skynet

Improve socketchannel

根据你之前的描述,“skynet表现为只尝试1~2节点” 并不是因为第 1 或第 2 节点返回了错误了 hosts 列表,而是第 2 节点可以建立连接却在 auth 阶段断开了服务。

之前的逻辑是,当 auth 出错就认为 socket channel 无法正确握手,会导致整个 socket channel 握手流程重置。充值之后就从头开始了,而没有迭代列表中的下一个。

目前的逻辑,socket channel 在建立连接成功之前,视为一个连续的握手过程,在这个过程中,所有 changebackup 的调用都是向这个握手过程 添加 备选 host ,而不是替换。替换的是将来发起新的流程时的列表。

cloudwu

comment created time in a month

pull request commentcloudwu/skynet

Improve socketchannel

@sabearcher 我想了解一下这个 pr 是否解决了你的问题,又没有新的问题。并下一个决定看要不要合并到主干。

cloudwu

comment created time in a month

pull request commentcloudwu/skynet

Improve socketchannel

不。可能就是需要删除一个坏掉的节点。客户端不应该为配置失误买单,应该信任服务器集群的决定。如果集群实现错误,那么是服务器的 bug 应该修正。

目前的做法是在一轮尝试中,在找到主节点前采用添加的语义。等到下一次,通常就采用了主节点定义的列表了。

cloudwu

comment created time in a month

pull request commentcloudwu/skynet

Improve socketchannel

因为客户端比服务器更不可信任,客户端的列表是更早配置的,和服务器集群间的协商结果相比,更加不可靠。

cloudwu

comment created time in a month

pull request commentcloudwu/skynet

Improve socketchannel

backup 目前只有 mongo 用,一开始也是为 mongo 设计的。

这么做倒不是为了照顾 mongo ,是想明确一下 auth 过程是不是 socketchannel 建立连接的一部分。如果是,那么 auth 失败后,我认为应该视为连接建立不成功,应该去尝试 backup 。

目前如果其它 socketchannel 用户若受影响,应该满足几个条件:

  1. 使用了 backup 机制,配置多个 host
  2. 使用了 auth 机制
  3. auth 有可能出错,希望 auth 出错后不尝试 backup

_add_backup 那段针对的是 auth 过程中 changebackup 的逻辑。我认为是合理的:因为既要把原来没试玩的 backup 尝试遍,又应该追加新 change 的 backup 集合。

如果 changebackup 后想重新来(放弃没尝试过的老的 backup)应该在 auth 里主动 changehost ,而不是 error 。如果是 error ,按老的逻辑就直接连接建立失败了。

cloudwu

comment created time in a month

issue commentcloudwu/skynet

mongo副本集超过3节点连接primary失败

@sabearcher https://github.com/cloudwu/skynet/pull/1146

我写了个 patch 改进这里的处理方式。因为我这里很难搭建对应的环境,所以麻烦你 review 一下 patch 的代码,并做一定的测试。如发现 patch 中的问题,可以继续在那个 pr 下讨论。

sabearcher

comment created time in a month

PR opened cloudwu/skynet

Improve socketchannel

See issue #1145

改进 socket channel, 在 auth 失败后,会尝试连接 backup 列表(若提供)中下一个 host 。

之前的实现 socket channel 仅当连接主 host 失败后才尝试连接 backup 。

由于 socket channel 实现了这个特性, mongodb driver 就不必额外实现 pickserver 功能。在找不到主节点时,直接抛出 error 即可。

这个 patch 的主要改变是将原来的 connect_once 函数包装了一层,原来逻辑放在内部函数 _connect_once 中,包装层会复制一份 backup 列表,在 _connect_once 建立连接失败(包括 socket 建立失败,及 auth 过程发生 error )后,尝试列表中没有试过的 host 。

注: 如果 auth 过程主动调用 changehost ,而非抛出 error ,则会重试整个 connect_once 过程。

+116 -106

0 comment

2 changed files

pr created time in a month

create barnchcloudwu/skynet

branch : socketchannel

created branch time in a month

issue commentcloudwu/skynet

mongo副本集超过3节点连接primary失败

我明白了。socketchannel 的 backup 列表只在连接不上时才会轮流试。对于 auth 阶段的错误则不会。我要想想怎么改。

sabearcher

comment created time in a month

issue commentcloudwu/skynet

mongo副本集超过3节点连接primary失败

我上个回复中的改法也有问题?

sabearcher

comment created time in a month

issue commentcloudwu/skynet

mongo副本集超过3节点连接primary失败

不过,这样修改有可能导致在配置错误(没有 primary 时) 变成死循环,因为会不断的添加已经尝试过的节点。如果想避免这种情况,可以在 __pickserver 中再加入一个 .tried table 将尝试过的节点记录下来,不要重复添加。

sabearcher

comment created time in 2 months

issue commentcloudwu/skynet

mongo副本集超过3节点连接primary失败

选择 primary host 的流程见这个 patch https://github.com/cloudwu/skynet/pull/525

我猜测这个实现有这样的问题:

__pickserver 列表只根据第一个成功连接的节点上取到,如果第一个节点上不存在你这里的第三节点,即使第二节点中提到,也是不可见的。

  1. 是否应该每次连接到新节点,都将新获取的 hosts 追加到 __pickserver 的末尾。
  2. mongo 的集群方案是否允许这种配置行为(允许每个节点并不配置所有其它节点),这里的问题是否只是一个配置错误?是否有标准指定?

@zxfishhack 你可以看看,我认为可以将 https://github.com/cloudwu/skynet/blob/master/lualib/skynet/db/mongo.lua#L128-L142 改为:

-- determine the primary db using hosts
local pickserver = rawget(mongoc, "__pickserver")
if pickserver == nil then
	pickserver = {}
	rawset(mongoc, "__pickserver", pickserver)
end
for _, v in ipairs(rs_data.hosts) do
	if v ~= rs_data.me then
		table.insert(pickserver, v)
	end
end

if pickserver <= 0 then
	error("CAN NOT DETERMINE THE PRIMARY DB")
end
local pick = table.remove(pickserver, 1)
skynet.error("INFO: TRY TO CONNECT " .. pick)
local host, port = __parse_addr(pick)

@sabearcher 你不妨试试。

sabearcher

comment created time in 2 months

issue commentcloudwu/skynet

mongo副本集超过3节点连接primary失败

这里可供选择的列表,是由第一台机器 ismater 指令返回值中的 hosts 列表决定的,你看看你的所有机器的列表有没有配置正确。

sabearcher

comment created time in 2 months

issue commentcloudwu/skynet

mongo副本集超过3节点连接primary失败

我阅读代码看到有 table.remove(mongoc.__pickserver, 1) ,在 pickserver 组里每尝试一个就会删除一个,并且只在没有 pickserver 时才会取一次,为什么会重复取回尝试过的 server 。

sabearcher

comment created time in 2 months

issue commentcloudwu/skynet

mongo副本集超过3节点连接primary失败

我对 mongo 这里的机制不熟悉,不知道官方的策略是怎样的?

sabearcher

comment created time in 2 months

push eventcloudwu/roguestale_cn

Cloud Wu

commit sha 0e127a65f26d18665ea2f3870b42a8fd3ee19364

restore finish_quest

view details

push time in 2 months

push eventcloudwu/roguestale_cn

Cloud Wu

commit sha 6f8322097d280221343ef8f0c8f9a6d8cec3730d

hoardDLC

view details

push time in 2 months

push eventcloudwu/roguestale_cn

Cloud Wu

commit sha f1b8c5980c0ffe0be54d724c440eca9e2d3377f0

dialogs

view details

push time in 2 months

push eventcloudwu/roguestale_cn

Cloud Wu

commit sha f4cce989adf6517e21869187988d3881e6b2918d

update dialog and manual

view details

push time in 2 months

pull request commentcloudwu/skynet

修改 sharetable loadfile 以文件真实名做key值

wiki 说的 loadfile 指把文件放在 file 里,而不是放在 string 里。而你可以用 loadstring ,将文件名传入,在这个 string 里面用 io.open 打开 file 再加载。

wiki 只是不建议 loadstring 加载很长的字符串而已。

cloudfreexiao

comment created time in 2 months

push eventcloudwu/roguestale_cn

Cloud Wu

commit sha 04f4e35c91f2133f40da4312b12d8c48afa5f911

Update Chinese 2.0.1

view details

push time in 2 months

push eventcloudwu/roguestale_cn

Cloud Wu

commit sha 2a3b33291721324567befae2adbd8e5f4b17459d

Update to 2.0.1

view details

push time in 2 months

pull request commentcloudwu/skynet

修改 sharetable loadfile 以文件真实名做key值

建议自行封装 sharetable.loadstring 实现,它可以指定 key 。

另外, 应该用 string:match "[^/]*$" 获得最后一个 / 之后的子串。应该避免用 c 的方法处理字符串。

cloudfreexiao

comment created time in 2 months

created tagcloudwu/skynet

tagv1.3.0

A lightweight online game framework

created time in 2 months

release cloudwu/skynet

v1.3.0

released time in 2 months

push eventcloudwu/skynet

Cloud Wu

commit sha d3a6b8d80bb9ac98154bd582d7dbcdc1ceef5d74

fix #1141

view details

push time in 2 months

issue closedcloudwu/skynet

multicast 怎么正确 unsubscribe

问题1:高并发情况下,怎么合理unsubscribe

按照目前的实现

function chan:unsubscribe()
	if not self.__subscribe then
		-- already unsubscribe
		return
	end
	local c = assert(self.channel)
	skynet.send(multicastd, "lua", "USUB", c)
	self.__subscribe = nil
	dispatch[c] = nil
end

取消订阅的时候把 dispatch[c] = nil 清空了,那么,此时还有多条消息未处理,当触发下面dispatch_subscribe 时候,必然出触发 error 异常...。

local function dispatch_subscribe(channel, source, pack, msg, sz)
	-- channel as session, do need response
	skynet.ignoreret()
	local self = dispatch[channel]
	if not self then
		mc.close(pack)
		error ("Unknown channel " .. channel)
	end

	if self.__subscribe then
		local ok, err = pcall(self.__dispatch, self, source, self.__unpack(msg, sz))
		mc.close(pack)
		assert(ok, err)
	else
		-- maybe unsubscribe first, but the message is send out. drop the message unneed
		mc.close(pack)
	end
end

同样的,云大的文章提出

由于 multicast 不在核心层实现,所以当一条组播消息被推送到目标消息队列中,在处理消息之前,服务退出。是没有任何渠道去减消息的引用。这在某些边界情况下会导致一定的内存泄露。

问题2:怎么在 skynet.task()skynet.mqlen都为0 的时候,正确 unsubscribe ,并且关闭服务

closed time in 2 months

abincai

push eventcloudwu/skynet

yxt945

commit sha 672bdcf39f6c2137164a7c7d555db26d8de82e72

增加mysql存贮过程和blob读写示例

view details

push time in 2 months

PR merged cloudwu/skynet

增加mysql存贮过程和blob读写示例

修改skynet/test/testmysql.lua,增加mysql存贮过程和blob读写示例。

+45 -0

0 comment

1 changed file

yxt945

pr closed time in 2 months

issue commentcloudwu/skynet

sharetable 使用方式 疑问

都差不多。但如果你需要更新部分的话,建议拆分,这样更新时加载方便一点。

管理上讲,一个更好。

cloudfreexiao

comment created time in 2 months

issue commentcloudwu/skynet

multicast 怎么正确 unsubscribe

这个 multicast 设计的不好,我建议重新自己设计一下。它不涉及 skynet 内核的东西。

我认为可以把 error 改成 return 即可。

abincai

comment created time in 2 months

delete branch cloudwu/ozz-animation

delete branch : merge_gltf

delete time in 2 months

issue commentcloudwu/skynet

multicastd的channel_id的越界问题

我觉得限制在 31bit 能解决这个问题。

另外,目前并没有处理同时超过 2^23 (大约 800 万) 个 channel 的情况,会死循环。 https://github.com/cloudwu/skynet/blob/master/service/multicastd.lua#L24

我觉得内存会先不够,但如果真碰到l了可能需要改改。

hongsx

comment created time in 2 months

push eventcloudwu/skynet

Cloud Wu

commit sha d232af70f2ef150ea41537de50a0ade92ecd7e3a

fix #1139

view details

push time in 2 months

issue closedcloudwu/skynet

multicastd的channel_id的越界问题

lua-multicast.c文件里面的channel_id生成函数生成的channel_id的范围是0~2的32次方 static int mc_nextid(lua_State *L) { uint32_t id = (uint32_t)luaL_checkinteger(L, 1); id += 256; lua_pushinteger(L, (uint32_t)id); return 1; }

但是lua-skynet.c文件的send_message函数里面的session在值大于2的31次方时会变成负数

所以只要某个skynet节点下multicast的channel_id超过2的31次方的时候就会出现如下的错误 [:00000008] lua call [8 to :8 : -2147483648 msgsz = 8] error : ../lualib/skynet.lua:642: ../lualib/skynet.lua:184: ../lualib/skynet/multicast.lua:74: Unknown channel -2147483648 stack traceback: [C]: in function 'error' ../lualib/skynet/multicast.lua:74: in upvalue 'f' ../lualib/skynet.lua:141: in function <../lualib/skynet.lua:113> stack traceback: [C]: in function 'assert' ../lualib/skynet.lua:642: in function 'skynet.dispatch_message'

closed time in 2 months

hongsx

PR opened guillaumeblanc/ozz-animation

Merge current master(release 0.12.0) into feature/gltf

This PR doesn't add anything new except merging master into feature/gltf.

The motivation is that I want to use gltf importer with the newest 0.12.0 release.

+277 -307

0 comment

52 changed files

pr created time in 2 months

create barnchcloudwu/ozz-animation

branch : merge_gltf

created branch time in 2 months

GollumEvent

issue commentcloudwu/skynet

需要 web socket 支持

fix #1137

cloudwu

comment created time in 2 months

push eventcloudwu/skynet

zixun

commit sha c075de74252b14f4d5f4a19f107573aef9198a16

use SSL_CTX_use_certificate_chain_file instead of SSL_CTX_use_certificate_file

view details

push time in 2 months

PR merged cloudwu/skynet

use SSL_CTX_use_certificate_chain_file instead of SSL_CTX_use_certificate_file…

使用SSL_CTX_use_certificate_chain_file来加载证书,支持中间证书。

+2 -2

0 comment

1 changed file

lvzixun

pr closed time in 2 months

issue closedbkaradzic/bgfx

Does BGFX support headless mode ?

We need a headless mode for automated testing , does BGFX support offscreen rendering without an output window/swap chain ?

closed time in 2 months

cloudwu

issue commentcloudwu/skynet

一个服务中调用pbc解析的问题

如果和 pbc 的实现有关联,那么你应该在 skynet 外就能测试出来。不必在 skynet 内部去调试。

pbc 虽然已经没有在维护了,但是我确定它的 decode 是线程安全的。在 skynet 环境下和外部独立环境有什么不同。

rdcentermrzhi

comment created time in 2 months

issue commentcloudwu/skynet

一个服务中调用pbc解析的问题

  1. 如果你传入 dispatch 的内存指针是你自己分配的,那么你应该检查内存管理是否正确,比如是否有 double free 。https://github.com/cloudwu/skynet/wiki/MemoryHook 而且,我也没看见你何时释放该指针。个人认为,很难在 lua 代码中正确做此管理。
  2. 如果此内存指针依赖服务传入的消息内存,那么你违背了 unpack 和 disptach 分离的原则。该指针应该只在 unpack 中使用。
  3. 我建议你不要在 lua 中玩 lightuserdata , 全部改成 string , 然后在必要的时候再小心考虑优化。
rdcentermrzhi

comment created time in 2 months

issue commentcloudwu/skynet

一个服务中调用pbc解析的问题

我看错了,你的 CMD.decode(name, msg, sz) 里并没有使用 msg 这个参数。

那么,你的整段程序就和 skynet 完全没有关系了。你应该在 skynet 外的 lua 环境做好测试。

btw, 严格来说, io.open 应该加上 "b" 确保是 binary 模式打开。

rdcentermrzhi

comment created time in 2 months

issue commentcloudwu/skynet

一个服务中调用pbc解析的问题

不建议在消息传递指针,你的代码你完全看不到指针指向的内存是如何在管理的。

rdcentermrzhi

comment created time in 2 months

issue commentcloudwu/skynet

初步观察是一个内存复写的问题

所有 skynet 传递给服务的消息 (lightuserdata) 都是临时的,在没有搞清楚前,不要承诺任何关于数据的生命期。

这就是为什么 skynet 的 lua 框架为什么在消息处理阶段要分 unpack 和 dispatch 两个 callback 。消息必须在 unpack 阶段处理完,并保证在 unpack 结束后,没有任何地方持有这个指针及指向的内容,且 unpack 函数中不应该调用任何阻塞 api ,甚至不要调用任何 skynet api 。仅仅把数据读出来转换成需要的,由 lua 管理的对象。

然后 dispatch 才去处理这个消息代表的对象。dispatch 并不直接处理指针。

rdcentermrzhi

comment created time in 2 months

issue openedbkaradzic/bgfx

Does BGFX support headless mode ?

We need a headless mode for automated testing , does BGFX support offscreen rendering without an output window/swap chain ?

created time in 2 months

issue commentcloudwu/skynet

初步观察是一个内存复写的问题

我不太明白你想表达什么。但我不建议自己写任何 c 模块直接操作 lightuserdata.

服务收到的指针应在第一时间一律转化为 lua string 后再进行进一步操作,不应再使用该指针。

rdcentermrzhi

comment created time in 2 months

push eventcloudwu/skynet

冉朋

commit sha ed6dd3967015f143ae3d40b1619f543a37b7edee

支持预处理句柄重置和释放

view details

冉朋

commit sha 64d6baa17648f5142f3ccafdd6a04e0bd92c2415

修改制表符

view details

冉朋

commit sha 386c709f425d090f5443b1cf2d0c875c93d35c13

修改制表符

view details

冉朋

commit sha f2d3bc3e5c061999acf55eb0d10adda0c2f87d7c

测试单元

view details

push time in 2 months

PR merged cloudwu/skynet

支持预处理句柄重置和释放
+42 -0

4 comments

2 changed files

zero-rp

pr closed time in 2 months

pull request commentcloudwu/skynet

支持预处理句柄重置和释放

@yxt945 麻烦看看。

另外,有可能同时补充测试吗?

zero-rp

comment created time in 2 months

Pull request review commentcloudwu/skynet

支持预处理句柄重置和释放

 function _M.execute(self, stmt, ...)     return sockchannel:request(querypacket, self.execute_resp) end +local function _compose_stmt_reset(self, stmt)+    self.packet_no = -1++    local cmd_packet = strpack("c1<I4", COM_STMT_RESET, stmt.prepare_id)+    return _compose_packet(self, cmd_packet)+end++--重置预处理句柄+function _M.stmt_reset(self, stmt)+    local querypacket = _compose_stmt_reset(self, stmt)+    local sockchannel = self.sockchannel+        if not self.query_resp then

这里缩进似乎有点问题。

zero-rp

comment created time in 2 months

GollumEvent

push eventcloudwu/skynet

fisherman

commit sha 5527e9e32ef21c83c8e05ae04f917848ab5f9036

增加 查询错误 提示

view details

push time in 2 months

PR merged cloudwu/skynet

增加 查询错误 提示
+1 -1

0 comment

1 changed file

cloudfreexiao

pr closed time in 2 months

more