首页 > 编程语言 >第一个程序PingPong

第一个程序PingPong

时间:2023-08-21 15:44:07浏览次数:44  
标签:服务 第一个 ping1 cmd 程序 PingPong 消息 skynet func

功能需求

如图所示,开启两个ping类型的服务ping1和ping2,ping1给ping2发消息,ping2收到回应ping1,ping1收到再回应ping2,不断循环。

服务模块

Skynet提供了开启服务发送消息的API,必先掌握它们。表2-5列出了Skynet中8个最重要的API,PingPong程序会用到它们。更多API可以参见 Skynet API

Lua API 说明
newservice(name,...)

启动一个名(类型)为name的新服务,并返回新服务的地址,地址格式为:0100000f、01000009即表示服务地址,同节点内的服务会有唯一地址,例如

local ping1 = skynet.newservice("ping")

表示开启一个ping类型的服务,把地址存放到ping1中

start(func) 用func函数初始化服务。编写服务时,都会写一名skynet.start,并在func写一些初始化代码
dispatch(type,func)

为type类型的消息设定处理函数fun。Skynet支持多种消息类型,由于Lua服务间的消息类型是“lua”,因此这里暂时将它固定为“lua”。func是指收到消息的处理函数,当一个服务收到新消息时,Skynet就会开启新协程,并调用它。func的形式为

function(session, source, cmd,...)

......

end

参数 session 代表消息的唯一id,source代表消息来源,指发送消息的服务地址,cmd代表消息号,"..."是一个可变参数,内容由发送方的skynet.send 或 skynet.call 指定

编写服务,一般会用如下的固定形式。表示以匿名函数的方式编写 skynet.start的参数func,并在func中调用dispatch

skynet.start(function()

  skynet.dispatch("lua",function(参数略)

    ......

  end)

end)

  send(addr,type,cmd,...)

向地址为addr的服务发送一条type类型的消息,消息名为cmd。发送方用skynet.send发送消息,接收文用skynet.dispatch接收消息,它们的参数相互对应。若用于服务间通信,类型一般固定为"lua" 例如,使用如下语句向服务 ping1 发送消息

skynet.send(ping1, "lua", "ping", 1, 2)

在ping1的dispatch回调中,参数的值如下

function(session, source, cmd, p1, p2, p3)

-- cmd = "ping"

-- p1 = 1

-- p2 = 2

-- p3 = nil

end

call(addr,type,cmd,...) 向地址为addr的服务发送一条type类型的消息,并等待对方的回应。skynet.call是个阻塞方法
exit() 结束当前服务
self() 返回当前服务的地址
error(msg) 向log服务发送一条消息,即打印日志

 

skynet.call的示意图

 

代码实现

 

标签:服务,第一个,ping1,cmd,程序,PingPong,消息,skynet,func
From: https://www.cnblogs.com/zhaobangyu/p/17646191.html

相关文章

  • 二进制CRC校验码生成程序
      /**二进制CRC序列生成程序*/#include<stdio.h>#include<string.h>#defineLEN_DIVIDEND30#defineLEN_DIVISOR30#defineLEN_SEQUENCELEN_DIVIDEND+LEN_DIVISORvoidCRC(char*,char*,char*);voidMOD2_div(char*,char*,char*);voidmove(char*,int);intmai......
  • Python自动化测试代理程序可用性
    Python自动化测试代理程序可用性在网络爬虫和数据采集过程中,代理服务器扮演着重要的角色。然而,代理服务器的可用性经常会受到影响,给爬虫工作带来一定的挑战。本文将介绍如何使用Python自动化测试代理程序的可用性,为您提供具备实际操作价值的解决方案。让我们一起来探索,提高您的爬虫......
  • 实验室信息管理系统(LIMS)源码,采用灵活的架构开发,支持多种应用程序和技术
    实验室信息管理系统(LIMS)是指帮助实验室组织和管理实验数据的计算机软件系统,它将实验室操作有机地组织在一起,以满足实验室工作流程的所有要求。它能以不同的方式支持实验室的工作,从简单的过程(如样品采集和入库)到复杂的流程(如教据报告和实验结果分析),完全改变实验室的工作流程,使......
  • App内拉起小程序的设计方案
    热更新是指软件不通过运营商店的软件版本更新审核,直接通过应用自行下载的软件数据更新的行为。单来说,就是在用户下载安装APP之后,打开App时遇到的即时更新。热更新是一种各大手游等众多App常用的更新方式。热更新的工作原理就是动态下发代码,它可以使开发者在不发布新版本的情况......
  • 中年失业程序员,居家做亚马逊。
    中年失业程序员,居家做亚马逊。同学中年失业了,之前做程序员。应该说是本本份份的人。代码能力还是有的。无奈,现实残酷。现在开始居家做亚马逊。一头雾水,完全不同的两个事情,两种思维方式。很难适应。另外,虽然是写代码,但是英语并不好。阻力很大。但是没有退路。我看他经常做的事,然后......
  • 微信小程序中的路由及其区别
    wx.navigateTo():保留当前页面,跳转到应用内的某个页面。但是不能跳到tabbar页面wx.redirectTo():关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到tabbar页面wx.switchTab():跳转到tabBar页面,并关闭其他所有非tabBar页面wx.navigateBack()关闭当前页面,返回上......
  • 利用pycharm创建第一个django API项目
    From:  ICT浪子 ICT浪子 2023-08-1916:34 发表于湖北---------------------------------------------------------------------------一、pycharm操作1、打开PyCharm,进入欢迎界面。2、点击"CreateNewProject"或选择"File"->"NewProject"。3、在新项目对话框中,......
  • 做十倍速全栈程序员
    什么是全栈程序员?-是指一个程序员,什么编程语言都会,什么工种都会。前端、后端、算法,iOS、App、网站,它一个人能够全部搞定。什么是十倍速程序员?-是指一个程序员的效率比别人高10倍以上。同一个工作,可能别人需要10天,他只需要1天。君子生非异也,善假于物也。一、工具GithubC......
  • 项目开始,遇到的第一个问题
    一个新的技术开项目真的是不容易,这几天都在处理各种问题首先页面的问题,虽然学习了,但不熟悉vue的各种用法,只能想像项目的样子,然后布局页面,然后进行各种资料的查找学习(谢谢现在网络上信息丰富)第一就是对样式css极度不熟悉,然后想达到想要的效果不断的查资料,花了两天才弄完登陆页面,......
  • 程序员的这10个坏习惯,你中了几个?超过一半要小心了
    前言一些持续关注过我的朋友大部分都来源于我的一些资源分享和一篇万字泣血斩副业的劝诫文,但今年年后开始我有将近4个月没有再更新过。有加过我好友的朋友私聊我问过,有些回复了有些没回复。想通过这篇文章顺便说明一下个人的情况,主要是给大家的一些中肯的建议。我的身体......