首页 > 其他分享 >socket服务端

socket服务端

时间:2023-05-08 17:36:04浏览次数:38  
标签:socket callbacks self stop callback message id 服务端

Socket实现在接收到不同的消息时启动 PeriodicCallback 返回不同的数据,并且关闭时只关闭其中某一个定时器

首先,你需要对 MainHandler 进行修改,添加一个字典 callbacks,用于保存每个消息对应的回调函数和其它相关信息,例如:

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    callbacks = {}

    def on_message(self, message):
        if message == "start_1":
            self.start_callback(1)
        elif message == "start_2":
            self.start_callback(2)
        elif message == "stop_1":
            self.stop_callback(1)
        elif message == "stop_2":
            self.stop_callback(2)
        else:
            self.write_message("Unknown command")

    def start_callback(self, callback_id):
        if callback_id not in self.callbacks:
            pc = tornado.ioloop.PeriodicCallback(lambda: self.write_message(f"Callback {callback_id}: some data"), 1000)
            pc.start()
            self.callbacks[callback_id] = {"callback": pc, "data": None}
            self.write_message(f"Callback {callback_id} started")
        else:
            self.write_message(f"Callback {callback_id} already started")

    def stop_callback(self, callback_id):
        if callback_id in self.callbacks:
            self.callbacks[callback_id]["callback"].stop()
            self.write_message(f"Callback {callback_id} stopped")
            del self.callbacks[callback_id]
        else:
            self.write_message(f"Callback {callback_id} not started")

app = tornado.web.Application([(r"/", MainHandler)])
app.listen(8888)

tornado.ioloop.IOLoop.current().start()

在上面的代码中,我们添加了一个 callbacks 字典,用于保存每个消息对应的回调函数和其它相关信息。在 on_message 方法中,当接收到消息 "start_1" 或 "start_2" 时,调用 self.start_callback 方法启动对应的定时器,并将定时器和其它相关信息保存到 callbacks 字典中。在 start_callback 方法中,如果 callbacks 字典中没有对应的回调函数,则创建一个新的 PeriodicCallback 对象,并将其启动;否则,直接返回已经启动的定时器。在定时器执行的回调函数中,我们通过 self.write_message 方法返回对应的数据。当接收到消息 "stop_1" 或 "stop_2" 时,调用 self.stop_callback 方法停止对应的定时器,并从 callbacks 字典中删除对应的信息。在 stop_callback 方法中,如果 callbacks 字典中存在对应的回调函数,则调用其 stop 方法停止定时器,并从字典中删除对应的信息;否则,直接返回对应的错误信息。

需要注意的是,在上面的代码中,我们使用了 lambda 表达式来创建定时器的回调函数,这样可以在回调函数中访问到 callback_id 参数,从而实现根据不同的消息返回不同

作者:燕春

标签:socket,callbacks,self,stop,callback,message,id,服务端
From: https://www.cnblogs.com/DTCLOUD/p/17382386.html

相关文章

  • java netty socket实例:报文长度+报文内容,springboot
    前言说实话,javanetty方面的资料不算多,尤其是自定义报文格式的,少之又少自己写了个简单的收发:报文长度+报文内容发送的话,没有写自动组装格式,自己看需求吧,需要的话,自己完善服务端启动可以直接用类文件启动,也可以通过springboot。我这里写的是用springboot启动的,可以自己按照需求自......
  • MySQL连接失败解决方法can't connect to local MySQL server through socket '/tmp/my
    【报错信息】can'tconnecttolocalMySQLserverthroughsocket'/tmp/mysql.sock'(111)【问题描述】新服务器上安装MySQL后无法正常启动,提示连接失败。【问题分析】出现这个问题主要是mysql配置错误,找不到mysql.sock文件【解决方法】寻找mysql.sock文件的位置,比较常见......
  • C/C++网络编程笔记Socket
    https://www.bilibili.com/video/BV11Z4y157RY/?vd_source=d0030c72c95e04a14c5614c1c0e6159b上面链接是B站的博主教程,源代码来自上面视频,侵删,这里只是做笔记,以供复习和分享。上一篇博客我记录了配置环境并且跑通了,以及碰到的一些问题这篇文章是对socket的代码解读笔记。先把服务端......
  • SVN服务端使用说明(二)
    服务端使用说明服务端安装完成后,进行创建用户,新建Repositiories等 项目描述Repositories仓库,可分不同文件夹进行存储项目。Users用户,可新增,删除,设置密码等Groups用户组,对不同用户可进行组划分Jobs计划任务,属于企业版高级功能(本文档暂不涉及),可定时备份仓库文件。1)创建用......
  • 一文讲明TCP网络编程、Socket套接字的讲解使用、网络编程案例
    文章目录1Socket讲解2基于Socket的TCP编程3客户端Socket的工作过程包含以下四个基本的步骤3.1客户端创建Socket对象4服务器程序的工作过程包含以下四个基本的步骤:4.1服务器建立`ServerSocket`对象5案例实现客户端和服务端通信5.1代码实现5.2实现结果6更多案例分析6.1客......
  • Python asyncore socket客户端开发基本使用
    导读asyncore库是python的一个标准库,提供了以异步的方式写入套接字服务的客户端和服务器的基础结构,这篇文章主要介绍了Pythonasyncoresocket客户端开发基本使用,需要的朋友可以参考下介绍asyncore库是python的一个标准库,提供了以异步的方式写入套接字服务的客户端和服......
  • Jenkins 执行Docker build错误Got permission denied while trying to connect to the
    问题: 解决方法:这个报错为权限问题1.把jenkins用户,加到docker用户组 #如果没有docker用户组,先创建用户组:groupadddocker#添加jenkins用户到用户组:sudousermod-a-Gdockerjenkins-a<追加>必须与-G选项一起使用,把用户追加到某些组中。-G<群组>修改用户所属的......
  • C# WinForm使用Socket通信搭建简易聊天室
    1、创建WinForm应用程序 主入口两个按钮事件:///<summary>///打开客户端///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidbtn_OpenClient_Click(object......
  • 获取WebView发送给服务端的Accept-Language请求头
    1,WebView没有提供获取Accept-Language请求头的接口2,WebView的publicWebResourceResponseshouldInterceptRequest(WebViewview,WebResourceRequestrequest){}回调中WebResourceRequest不包含Accept-Language请求头,即使客户端向服务器端发送的请求中包含该请求头3,javascr......
  • PostgreSQL 12 文档: PostgreSQL 服务端程序
    PostgreSQL服务器应用这一部分包含PostgreSQL服务器应用和支持工具的参考信息。这些命令只在数据库服务器所在的主机上运行才有用。其他工具程序在PostgreSQL客户端应用中列出。目录initdb —创建一个新的PostgreSQL数据库集簇pg_archivecleanup —清理PostgreSQL WAL......