SuperSocket教程八:通过服务器计划将数据推送到客户端

2023-11-11

前面我们知道了如何使用客户端去连接服务端
然后给服务端发送消息
根据消息的关键字服务端进行返回等等
但是那都是来自客户端的请求
我们服务端如何去主动给客户端发消息呢
这些逻辑到哪里去写呢
这里我写了一份代码供大家参考

官方文档说了
建议session的逻辑写在session相关的类里面
建议server的写在server的类里面
那我们按它的来
当服务端开启的时候
我准备定时去给我的客户端发送消息
既然是开始的时候去发送 那么我们是需要去开启一个线程来做这件事情的
那代码该卸载哪里 当然是OnStarted()这里

using Socket.appReceive;
using Socket.appSession;
using SuperSocket.SocketBase;
using SuperSocket.SocketBase.Config;
using SuperSocket.SocketBase.Protocol;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

namespace Socket.appServer
{
    public class MyAppServer : AppServer<MyAppSession>
    {
        protected override bool Setup(IRootConfig rootConfig, IServerConfig config)
        {
            return base.Setup(rootConfig, config);
        }

        
        protected override void OnStarted()
        {
            Console.WriteLine(this.Name+"服务器已启动");
            this.NewRequestReceived += new RequestHandler<MyAppSession, StringRequestInfo>(appServer_NewRequestReceived);
            Task.Factory.StartNew(()=> {
                while (true) {
                    Thread.Sleep(5000);
                    if (this.GetAllSessions() != null)
                    {
                        foreach (var item in this.GetAllSessions())
                        {
                            item.Send("hello");
                        }
                    }
                    else {
                        Console.WriteLine("无客户端连接");
                    }
                    
                    
                }
               
            });
        }


        /// <summary>
        /// 对接收的数据进行处理
        /// </summary>
        /// <param name="session"></param>
        /// <param name="requestInfo"></param>
        private  void appServer_NewRequestReceived(MyAppSession session, StringRequestInfo requestInfo)
        {
            try
            {
                Console.ForegroundColor = ConsoleColor.Green;
                int flag = 0;
                switch (requestInfo.Key.ToUpper())
                {
                    case ("ECHO"):
                        if (requestInfo.Body.Contains("hello"))
                        {
                            session.Send("hi my name is Server");
                            flag++;
                        }
                        else
                        {
                            session.Send("ninainaider");
                            flag++;
                        }
                        break;

                    case ("ADD"):
                        new ADD().ExecuteCommand(session, requestInfo);
                        flag++;
                        break;

                    case ("MULT"):
                        new MULT().ExecuteCommand(session, requestInfo);
                        flag++;
                        break;
                }
                if (flag == 0)
                {
                    Console.WriteLine("信息来自:"+ session.RemoteEndPoint +"==>"+ requestInfo.Key + requestInfo.Body);
                }
               

            }
            catch (Exception)
            {

                Console.WriteLine("异常");
            }

        }
       

        protected override void OnStopped()
        {
            
            base.OnStopped();
        }



    }
}

代码如上
在这里插入图片描述
每隔五秒去向所有客户端发一次hello
启动程序
开启两个网络调试助手客户端

在这里插入图片描述
可以看到每隔五秒会接收到服务端的消息
我们可以把这种情况运用到很多场景
比如采集器的一些信息收集
定时读取某些设备的信息等等

(7条消息) SuperSocket教程八:通过服务器计划将数据推送到客户端_亮大大大的博客-CSDN博客_supersocket

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SuperSocket教程八:通过服务器计划将数据推送到客户端 的相关文章

  • 微信小程序 live-pusher 实时音视频录制 组件

    完整微信小程序 Java后端 技术贴目录清单页面 必看 实时音视频录制 v2 9 1 起支持同层渲染 需要用户授权 scope camera scope record 暂只针对国内主体如下类目的小程序开放 需要先通过类目审核 再在小程序管理
  • HTB-Tier2- Unified

    HTB Tier2 Unified Tags Web Vulnerability Assessment Databases Injection Custom Applications Outdated Software MongoDB Ja
  • Element ‘aop:before‘ must have no character or element information item [children], because

    报错的XML配置
  • centos8用阿里云安装yum源

    Centos8用阿里云装yum源 首先ping外网 ping baidu com能通就可以开始做了 阿里云yum源设置官方文档 https developer aliyun com mirror centos spm a2c6h 13651
  • Blender几个简单建模

    吉普车 这里车窗添加了玻璃材质 看起来更真实 简易台灯 可以设置成自己喜欢的形状 颜色 酒瓶 这是还没有上色的 啤酒瓶大多数都是绿色的 一把红色的椅子 个人喜欢红色系列的 就添加了红色 以上都是简单的模型 初学者还需要继续努力
  • Ajax&JavaScript&css模仿百度一下模糊查询功能

    1 效果 如下图所示 我们在输入大学时 程序会到后端查询名字中包含大学的数据 并展示到前端页面 用户选择一个大学 该大学值会被赋值到input表单 同时关闭下拉表单 当页面展示的数据都不符合条件时 用户点击空白处 可关闭表单 2 前端 2
  • 微信小程序案例分享

    微信小程序 后台管理类 1 社区团购小程序 2 音乐播放器小程序 3 家具商城小程序 4 二手交易小程序 5 疫苗小程序 6 智慧停车小程序 7 读书小程序 8 美食小程序 前后端分类 管理后台类 1 企业招聘 2 客户关系管理系统 3 试

随机推荐

  • 敏捷开发中asp.net MVC的开发次序感受(先开发View?先开发Model?先开发Controller!)

    转载自 http blog csdn net cheny com article details 6592493 各种思路和顺序都试过 最开始时先编写Model 毕竟Model是所有一切的基础 再说没有Model Controller里边用
  • 2019年中山大学数据科学与计算机学院研究生统考机试

    2019年中山大学数据科学与计算机学院研究生统考机试题目回忆 本文回忆了2019年中山大学数据科学与计算机学院研究生考试机试题目 希望能对以后的同学的学习有所帮助 机试共十道题 1 继承 一共有3个类 animal cat dog cat和
  • ciscn 2022 misc 部分wp

    everlasting night 提示是注意png数据块 然后注意图片通道数据可以用来lsb解码 下载是一张图片 尝试几种方法之后没有太大发现 得到提示于是看了一下stegsolve f78dcd383f1b574b 这里发现了一串可疑字
  • 90、Tensorflow实现分布式学习,多台电脑,多个GPU 异步试学习

    Created on 2017年5月28日 author weizhen import time import tensorflow as tf from tensorflow examples tutorials mnist import
  • Vue 实现左边导航栏且右边显示具体内容(element-ui)

    最终效果图 现在开始进入正题 1 安装element ui npm i element ui S CDN 目前可以通过 unpkg com element ui 获取到最新版本的资源 在页面上引入 js 和 css 文件即可开始使用
  • 探索人工智能

    前言 模型训练是指使用算法和数据对机器学习模型进行参数调整和优化的过程 模型训练一般包含以下步骤 数据收集 数据预处理 模型选择 模型训练 模型评估 超参数调优 模型部署 持续优化 文章目录 前言 数据收集 数据预处理 模型选择 模型训练
  • Tracy 小笔记 Vue - 路由

    Vue Router 路由中有一个非常重要的概念叫路由表 本质上就是一个映射表 决定了数据包的指向 服务器渲染 后端渲染 如 jsp php java 服务器直接生产渲染好对应的 html 页面 返回到客户端进行展示 这种情况下渲染好的页面
  • java实现截图功能

    java实现截图功能 java实现截图 录屏 public static void main String args throws InterruptedException 截取整个屏幕 保存在H盘下 名字为当前时间毫秒值 格式为png T
  • Unity3D-UI--Layout组件

    Layout组件 自动排版 Layout Group Vertical Layout Group 垂直布局 垂直布局组 组件将其子布局元素彼此重叠 它们的高度由各自的最小高度 首选高度和柔性高度决定 具体取决于以下模型 Vertical L
  • Activity之间的跳转的两种实现方法

    概括 在Android当中 Activity的跳转有两种方法 第一个是利用startActivity Intent intent 的方法 第二个则是利用startActivityForResult Intent intent int req
  • QT添加外部动态库

    编译完动态库 将动态库debug文件夹中的 a和 dll拷贝下来 在window中 dll 动态库 lib 静态库 在linux中 so 动态库 a 静态库 在根目录下新建include 并放入其中 同样的把头文件也放入include中 然
  • 图论基本概念

    文章目录 图 相邻 度 简单图 路径 子图 连通 无向图 有向图 本章概述了图论中的一些概念 部分内容来源于 OI Wiki 图 图 Graph 是一个由 点集 Vertex set 和 边集 Edge set 组成的二元组 常用 G V
  • 哈工大深圳计算机水平怎么样,还原一个真实的哈工大!——十问(转载)

    发信人 hiticeberg 千面怪 信区 NewExpress 标 题 还原一个真实的哈工大 十问 发信站 水木社区 Fri May 30 19 37 50 2008 站内 作为哈工大的土著 也许也是目前连续在校时间最长的哈工大学子 在毕
  • [蓝桥杯][2013年第四届真题]剪格子

    一定要好好审题啊 行号和列号跟题意要求的搞反了 结果de到怀疑人生了 这个题给的数据量不大 所以我就放心大胆的在每个中间节点里各开了一个vis标记数组 用来记录每一条广搜路径走过的节点 include
  • 微信小程序使用 scss

    一 在 vscode 中安装 easy sass 扩展 二 在微信开发者工具导入 vscode 安装的 easy sass 扩展 安装完成后会让重新加载扩展 再次打开后就可以看到扩展已经有 easy sass 了 三 修改 easy sas
  • 【雕爷学编程】MicroPython手册之 WiPy 特定端口库 wipy.machine.I2C.readfrom()

    MicroPython是为了在嵌入式系统中运行Python 3编程语言而设计的轻量级版本解释器 与常规Python相比 MicroPython解释器体积小 仅100KB左右 通过编译成二进制Executable文件运行 执行效率较高 它使用
  • 用logrotate拆分nginx日志

    被遗忘的Logrotate
  • uban服务器系统,Web服务器-并发服务器-Epoll(3.4.5)

    1 介绍 epoll是一种解决方案 nginx就是用的这个 中心思想 不要再使用多进程 多线程了 使用单进程 单线程去实现并发 在上面博客实现的代码中使用过的轮询去查看套接字有没有数据 而epoll是主动通知 当使用多进程的时候 是复制一份
  • osg学习(六十九)平移、旋转、缩放实现过程

    1 主程序 osg PositionAttitudeTransform patTransform new osg PositionAttitudeTransform patTransform gt setPosition l2wMatrix
  • SuperSocket教程八:通过服务器计划将数据推送到客户端

    前面我们知道了如何使用客户端去连接服务端 然后给服务端发送消息 根据消息的关键字服务端进行返回等等 但是那都是来自客户端的请求 我们服务端如何去主动给客户端发消息呢 这些逻辑到哪里去写呢 这里我写了一份代码供大家参考 官方文档说了 建议se