Re: [skynet] skynet-users@googlegroups.com 的摘要 - “1个主题”有 2个更新

26 views
Skip to first unread message

Zheng Ping

unread,
Aug 10, 2020, 11:58:52 AM8/10/20
to skynet...@googlegroups.com
谢过风神,这么快做了功能的补强,我好好研习一番.

<skynet...@googlegroups.com> 于2020年8月10日周一 下午11:39写道:
Zheng Ping <kyt...@gmail.com>: Aug 10 01:12AM +0800

各位大拿:
 
我是第一次用C写skynet服务,我目前正在服务中处理socket类型的message。我有个问题想不通,比如客户端要往skynet发送500M的数据,
在我的skynet服务中我每读1M的socket buffer后就希望skynet的socket
server能停止接收对应客户端发送的数据0.1秒钟, 0.1秒后继续接受客户端的发送的数据,思考良久一直没找到解决方案,请指教!
 
--
with kind regards
"云风 Cloud Wu" <clo...@gmail.com>: Aug 10 11:07AM +0800

Zheng Ping <kyt...@gmail.com> 于2020年8月10日周一 上午1:13写道:
 
> 各位大拿:
> 我是第一次用C写skynet服务,我目前正在服务中处理socket类型的message。我有个问题想不通,比如客户端要往skynet发送500M的数据, 在我的skynet服务中我每读1M的socket buffer后就希望skynet的socket server能停止接收对应客户端发送的数据0.1秒钟, 0.1秒后继续接受客户端的发送的数据,思考良久一直没找到解决方案,请指教!
 
skynet 在设计之初,并没有考虑客户端大量上行数据的场合,所以采用的是简单粗暴的方式,有数据就读。通常可以通过在应用层设计协议,和客户端友好协商来解决。
另外,如果使用 lua api ,可以设置 socket.bufferlimit
来防止客户端无限上行数据而逻辑没有处理,导致内存暴增。目前的手段是超过 bufferlimit 就自动断开。
 
考虑到 skynet 应用场合的扩大,我觉得提供机制做限制也有必要。所以今天给 skynet 增加了 C api
skynet_socket_pause 可以用来暂停数据接收;借用过去的 skynet_socket_start 可以延续。
同时,lua api 也增加对应的 socket.core.pause 。
 
https://github.com/cloudwu/skynet/commit/a4dc6b909478a7397eb205f3ca5a2800e9391d65
 
实现原理是:通知 socket 线程,把对应 fd 从 epoll 中删除,直到下次调用 start 再重新加入。
 
不过这些暂时仅 C 库使用,尚未给已有 lua 库/服务增加对应机制。(没有修改 socket 库或 gate 服务)
 
我认为未来可以完善 gate 服务,用上这个特性。
 
--
http://blog.codingnow.com
您收到此摘要邮件是因为您订阅了此群组的最新动态。您可以在群组成员资格页面上更改设置。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到 skynet-users...@googlegroups.com


--
with kind regards
Reply all
Reply to author
Forward
0 new messages