[SSCore] 开源dotnet core 版本 SuperSocket

前言碎语

最近一直在做旧版本dotnet 程序迁移至dotnet core的工作, 非常欣慰dotnet社区的蓬勃发展, 目前大部分的第三方类库或开源代码都有了dotnet core版本 或者可以方便的找到替代方案. 这其中我唯一觉得遗憾的是dotnet 社区大名鼎鼎的socket 通讯框架SuperSocket


SuperSocket是啥?

引用SuperSocket官方介绍:
SuperSocket是一个轻量级, 跨平台而且可扩展的 .Net/Mono Socket 服务器程序框架。你无须了解如何使用 Socket, 如何维护 Socket 连接和 Socket 如何工作,但是你却可以使用 SuperSocket 很容易的开发出一款 Socket 服务器端软件,例如游戏服务器,GPS 服务器, 工业控制服务和数据采集服务器等等。

从技术的角度来看, SuperSocket是基于.NET IOCP的AsyncSocketEventArgs进行开发设计的Socket通讯框架. 既然是IOCP则必然是异步处理, 这样对编程人员的门槛则比较高. SuperSocket封装了对Socket连接的维护, 发送接收的程序逻辑. 这样对于一般的程序开发人员大大降低了编码门槛, 提高了开发效率.

动手来开源

一直受益于开源社区的各位大神, 也觉得自己该做些什么. 突然发现这是个机会, 便把SuperSocket代码转换为dotnet core 版本. 项目地址在这里SSCore. 目前还并没有完全把SuperSocket的全部逻辑转过来. 考虑到自己的一些需求, SuperSocket的命令模式并不适用.
所以主要是将Socket通信部分的代码拿过来, 根据自己对这个开源库所要面向场景的理解, 做了一些调整.

使用方法很简单, 首先获得一个SocketServer的实例,

    SocketServerBase server = new SocketServerBase();    
   server.NewClientAccepted += Server_NewClientAccepted;  
   server.Start();

然后定义一个客户端连接的委托实现, 主要是获取到当前Session实例

private static void Server_NewClientAccepted(Socket client, 
         ISocketSession session) {Console.WriteLine("----- new client ------------");AsyncSocketSession ass = session as AsyncSocketSession;ass.SetReceiveHandler(arg =>{Console.WriteLine("----- new receive ------------");string received = System.Text.Encoding.UTF8.GetString(arg.Buffer,
arg.Offset, arg.BytesTransferred);      
           Console.WriteLine(received);ass.Send(received);});}

这里面的SetReceiveHandler是为处理接收数据而实现的回调函数.

要使用好此框架, 主要遵循以下原则:

  1. AsyncSocketSession 为异步Socket连接处理的对象, 可方便的发送/接收

  2. 代码中可以对AsyncSocketSession 对象进行相应的管理

  3. 注意资源的回收

相关文章:

  • SuperSocket, 可扩展的 Socket 服务器框架

  • SuperSocket源码解析之开篇

  • SuperSocket与Netty之实现protobuf协议,包括服务端和客户端

原文地址:http://www.jianshu.com/p/72b13fc4ae34


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/326694.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

字母图形

资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 利用字母可以组成一些美丽的图形,下面给出了一个例子: ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 这是一个5行7列的图形,请找出这个图形的规律,并…

Spring 注入内部 Beans

转载自 Spring 注入内部 Beans 注入内部 Beans 正如你所知道的 Java 内部类是在其他类的范围内被定义的&#xff0c;同理&#xff0c;inner beans 是在其他 bean 的范围内定义的 bean。因此在 或 元素内 元素被称为内部bean&#xff0c;如下所示。 <?xml version"…

asp.net core mvc剖析:KestrelServer

KestrelServer是基于Libuv开发的高性能web服务器&#xff0c;那我们现在就来看一下它是如何工作的。在上一篇文章中提到了Program的Main方法&#xff0c;在这个方法里Build了一个WebHost&#xff0c;我们再来看一下代码&#xff1a; public static void Main( string [] args) …

ssm(Spring+Spring mvc+mybatis)Dao层实现类——DeptDaoImpl

/** * Title: DeptDaoImpl.java * Package org.dao.impl * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-12-26 下午9:02:32 * version V1.0 */ package org.dao.impl;import java.util.List;import org.dao.IDeptDao…

win 7 mysql 1067_win7系统登陆MySQL服务出现1067错误的解决方法

很多小伙伴都遇到过win7系统登陆MySQL服务出现1067错误的困惑吧&#xff0c;一些朋友看过网上零散的win7系统登陆MySQL服务出现1067错误的处理方法&#xff0c;并没有完完全全明白win7系统登陆MySQL服务出现1067错误是如何解决的&#xff0c;今天小编准备了简单的解决办法&…

图的快速入门

快速入门案例 代码实现 package com.atguigu.graph;import java.util.ArrayList; import java.util.Arrays;/*** 创建人 wdl* 创建时间 2021/4/2* 描述*/ public class Graph {private ArrayList<String> vertexList;//存储顶点集合private int[][] edges;//存储图对应的…

Spring 注入集合

转载自 Spring 注入集合 注入集合 你已经看到了如何使用 value 属性来配置基本数据类型和在你的 bean 配置文件中使用<property>标签的 ref 属性来配置对象引用。这两种情况下处理奇异值传递给一个 bean。 现在如果你想传递多个值&#xff0c;如 Java Collection 类…

.net core依赖注入的封装

现在流行的系统一般都采用依赖注入的实现方式&#xff0c;利用DI容器来直接获取所用到的类/接口的实例。.net core也一样采用DI的方式&#xff0c;提供了DI容器的接口IServiceCollection&#xff0c;并提供了基于该接口的缺省实现ServiceCollection。 这样我们就可以不再像以前…

ssm(Spring+Spring mvc+mybatis)Dao层配置sql的文件——DeptDaoMapper.xml

<?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- namespace&#xff1a;接口的全路径名 --> <map…

图的深度优先遍历+图解

图解 代码实现 package com.atguigu.graph;import java.util.ArrayList; import java.util.Arrays;/*** 创建人 wdl* 创建时间 2021/4/2* 描述*/ public class Graph {private ArrayList<String> vertexList;//存储顶点集合private int[][] edges;//存储图对应的邻接矩阵…

php mysql 编码为utf-8_php连mysql用 utf-8编码乱码怎么办

展开全部PHP页面转UTF-8编码问32313133353236313431303231363533e78988e69d8331333361316639题1.在代码开始出加入一行&#xff1a;复制代码 代码如下:header("Content-Type:text/html;charsetutf-8");2.PHP文件编码问题点击编辑器的菜单&#xff1a;“文件”->“…

Spring 自动装配 ‘byName’

转载自 Spring 自动装配 ‘byName’ Spring 自动装配 ‘byName’ 这种模式由属性名称指定自动装配。Spring 容器看作 beans&#xff0c;在 XML 配置文件中 beans 的 auto-wire 属性设置为 byName。然后&#xff0c;它尝试将它的属性与配置文件中定义为相同名称的 beans 进行…

Azure SQL的DTU和eDTU到底是个什么鬼

Azure SQL 使用了数据库事务单位 (DTU) 和弹性数据库事务单位 (eDTU)来作为一个计量单位。 但是DTU和eDTU是什么鬼啊? 官方文档这样解释 DTU 是一个资源度量单位&#xff0c;表示保证可用于单一数据库服务层内特定性能级别的单个 Azure SQL 数据库的资源。 DTU是一定比例的 C…

ssm(Spring+Spring mvc+mybatis)Service层接口——IDeptService

/** * Title: IDeptService.java * Package org.service * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-12-26 下午9:10:12 * version V1.0 */ package org.service;import org.dao.IDeptDao;/** * * 项目名称&…

centos5.9 mysql_CentOS 5.9系统服务器使用yum安装Apache+PHP+MySQL环境

Centos 里的 yum 在线安装很慢.以下是替换为中国CentOS镜像服务器!中国官方镜像网站: http://centos.ustc.edu.cn//* 使用说明 */cd /etc/yum.repos.d[进入yum.repos.d目录]mv CentOS-Base.repo CentOS-Base.repo.save[修改源文件名称备份]wget http://centos.ustc.edu.cn/Cent…

2015蓝桥杯省赛---java---B---1(三角形面积)

题目 三角形面积 解法 数学方法&#xff0c;直接求三角形的面积 88 - (82)/2 - (46)/2 - (84)/2 64 - (81216) 64 - 36 28 答案 28

Spring 自动装配 ‘byType’

转载自 Spring 自动装配 ‘byType’ Spring 自动装配 ‘byType’ 这种模式由属性类型指定自动装配。Spring 容器看作 beans&#xff0c;在 XML 配置文件中 beans 的 autowire 属性设置为 byType。然后&#xff0c;如果它的 type 恰好与配置文件中 beans 名称中的一个相匹配…

ssm(Spring+Spring mvc+mybatis)Service层实现类——DeptServiceImpl

/** * Title: DeptServiceImpl.java * Package org.service.impl * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-12-26 下午9:19:09 * version V1.0 */ package org.service.impl;import java.util.List;import org.…

深入理解Async/Await

C# 5 Async/Await 语法特性&#xff0c;极大地简化了异步编程&#xff0c;但我们知道&#xff0c;异步编程的基本原理并没有发生根本改变。也就是说&#xff0c;当一些复杂的东西看起来很简单时&#xff0c;它通常意味着有一些有趣的事情在背后发生。在计算机程序设计语言领域&…

c mysql 编码_mysql编码转换 mysql编码设置详解

查看mysql编码&#xff1a;一、 代码示例:mysql> show variables like character_set_%;------------------------------------------------------| variable_name | value |------------------------------------------------------| character_set_client | latin1 || cha…