2019独角兽企业重金招聘Python工程师标准>>>

什么是世界频道?

"世界频道" 这个概念就是在一个游戏内经常见到。简单来说,世界频道就是在游戏内的一个大区中所有玩家可以接收、发布的消息的一个玩家间的统称。

玩家在游戏中进行体验的同时,通常需要发布一些特殊的消息,包含:"买卖装备、组队等";通常游戏中的各种频道的实现都依赖于消息队列的广播方式。

Skynet的组播解决了什么问题?

Skynet将消息通过指针进行传递到不同的服务之间,实现的简单的消息队列。当组播的消息较大时,可以节省内部网络的带宽。

下面直接上代码:

#Main:

local skynet = require "skynet"
local socket = require "socket"skynet.start(function()local id = socket.listen("192.168.2.5",80)socket.start(id,function(fd,ipaddr)local network = skynet.newservice "network"skynet.send(network,"lua","Connection",fd,ipaddr)socket.abandon(fd)end)end)

#network

local skynet = require "skynet"
local msg = require "multicast"
local socket = require "socket"skynet.init(function()-- 注册世界聊天频道world_channel = skynet.uniqueservice "world_chat"msg_fd = msg.new {channel = skynet.call(world_channel,"lua","getMsgId"),dispatch = get_subscribeMsg,}end)local CMD = { }function CMD.Connection(fd,ipaddr)CMD.fd,CMD.ipaddr = fd,ipaddr--print "订阅消息"msg_fd:subscribe()socket.start(fd)socket.write(fd,"welcome!\n\r>>")while fd dolocal buf = socket.readline(fd)if buf thenmsg_fd:publish(buf)elseskynet.error("Client Closed this Connection...")breakendendsocket.close(fd)msg_fd:unsubscribe()skynet.exit()
endfunction get_subscribeMsg(channel,session,msg)socket.write(CMD.fd,msg)socket.write(CMD.fd,"\r\n>>")
endskynet.start(function()skynet.dispatch("lua",function(_,_,cmd,...)local f = assert(CMD[cmd],"找不到指定的处理函数...")if f then f(...)endend)
end)

#world_chat

local skynet = require "skynet"
local msg = require "multicast"local CMD = { }skynet.init(function()print "初始化世界频道...."world_channel = msg.new()
end)function CMD.getMsgId()skynet.ret(skynet.pack(world_channel.channel))
endskynet.start(function()skynet.dispatch("lua",function(_,_,cmd,...)local f = assert(CMD[cmd],"找不到指定的处理函数...")if f then f(...)endend)
end)

上述代码通过Skynet 的multicast实现了简单的世界聊天,在退出后关闭订阅。

而上述代码也存在两个问题。至于是什么问题?这个就留给大家自己思考了。:)

转载于:https://my.oschina.net/CandyMi/blog/852202

Skynet 通过组播(Multicast)实现一个简单的世界频道相关推荐

  1. 网络层:单播unicast 组播multicast 广播broadcast

    当前的网络中有三种通讯模式:单播.广播.组播(多播),其中的组播出现时间最晚但同时具备单播和广播的优点,最具有发展前景. 一.单播unicast: 主机之间"一对一"的通讯模式,网 ...

  2. 分布式系统(四) 组播 Multicast

    Multicast 组播 通信模式 Unicast 一个进程向另一个进程发送消息 尽力而为:如果信息传送,就没有被破坏 可靠的:保证信息能传送 有序:信息传送(deliver)的顺序与发送的顺序一致 ...

  3. java单播多播socket_广播(broadcast),组播(multicast),单播(unicast)的Java实现

    ## IP地址 在IPv4中,一共有五类IP地址 * A类地址:网络号占1个字节.网络号的第一位固定为0. * B类地址:网络号占2个字节.网络号的前两位固定为10. * C类地址:网络号占3个字节. ...

  4. 关于图片轮播图的一个简单实例 以及实例中发现问题

    1.最近在学习JS的过程中,为了巩固水平做了一个简单的轮播图,以及在做的过程中发现一些问题(未解决!希望可以有大佬可以解释这个问题) 2.代码如下: <!DOCTYPE html> < ...

  5. UDP单播 组播 广播 区别及简单实现

    无论是tcp还是udp 服务器都必须绑定prot.Ip,客户端可以有选择性. udp单播: 单播只能是发送方往接收方指定的IP 端口发送数据 组播需具备的条件  1.接收方设置组播属性及组播号  2. ...

  6. python编程简单案例_[五组数据]详解一个简单的卡尔曼滤波器python编程实例

    上半年毕设的时候接触了卡尔曼滤波器,用matlab实现了该过程,尝试在一个课后作业中用三维度矩阵来存储变量的方式,结构似乎更好理解,记录一下分析的过程. 假如有一块电阻,你不知道它的阻值是多少,你想 ...

  7. Upd通信之QUdpSocket的unicast单播、broadcast广播、multicast组播

    简 述: 了解Upd通信之QUdpSocket的unicast单播.broadcast广播.multicast组播,书写一个简单地例子:然后写了一个小的Qt例子,用来实现和验证它的空间的一些属性和功能 ...

  8. skynet框架应用 (八) Multicast组播

    8 Multicast组播 8.1 Multicast介绍 local mc = require "skynet.multicast" ​ 引入 multicast 模块后,你可以 ...

  9. 网工笔记(三):IP Multicast组播技术

    IP多路组播技术,英文为IP Multicast,  就是英文文档里经常说到的BUM报文里的大M.这是一门特别的技术,它从2层到3层协议mac地址到IP地址都自成一体.很多网工同行只在IE考试里学习了 ...

最新文章

  1. django html数据库连接,Django数据库连接的问题
  2. 推荐收藏 | 算法工程师常见面试问题及相关资料汇总
  3. 2019年企业云呈现五大技术发展趋势
  4. 和 的运算(值)结果 及 Boolean结果
  5. centos jupyter 安装_centos7安装 jupyter
  6. 那些云中的负载均衡器——Azure、AWS和NetScaler
  7. Python语言被列入全国计算机等级考试科目中
  8. python_numpy_中的matrix与array的区别
  9. MySQL Workbench 8.0 CE卸载不了
  10. 中国城市群产业建设风险与投资发展决策建议报告2022版
  11. 配置Skype for business 2015混合部署
  12. 互联网行业中最常用的数据库——MySQL数据库介绍
  13. 中国量化金融行业 全解 金融工程 计算机 统计学 金融 专业领域 就业指南
  14. 【图像融合】基于matlab高分辨率全色图IHS图像融合(含评价指标)【含Matlab源码 2406期】
  15. python初级试题及答案
  16. 数据堂-数加加众包任务招募啦~!说方言,来赚钱
  17. QQ浏览器查看Cookies
  18. 信道均衡-LMS自适应均衡算法matlab实现
  19. day29 HTML基础
  20. 现货黄金入门与技巧:如何在财经数据、新闻

热门文章

  1. Visual Studio 2022如何设置背景图片以及如何恢复默认背景
  2. 嵌套结果、嵌套查询与延迟加载
  3. 小程序(二十六)微信小程序解析富文本的几种方式
  4. x战警 天启高清完整版下载
  5. mac苹果电脑如何把视频转成gif
  6. JAVA学习历程/基础篇/第二天
  7. servlet+jdbc+html+jquery+Mysql数据库(基于MVC的简单查询系统)
  8. 如何从Exploit-DB中添加模块至Metasploit
  9. 会声会影2023最新版图文安装详细教程
  10. 【mba项目管理论文】热力集团公司供热工程目项目管理研究(节选)