高性能异步Socket框架
Server:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using Spider.Network; namespace Spider.Server
{
class Program
{
static void Main(string[] args)
{
ServerConfig config=new ServerConfig()
{
BufferSize = ,
Listeners = new List<ListenerConfig>()
{
new ListenerConfig()
{
Backlog = ,
IP="any",
Port=
}
},
MaxConnection =
};
AsyncTcpHost host=new AsyncTcpHost("server.cfg");
host.Use(async (ctx, next) =>
{
Stopwatch watch = new Stopwatch();
watch.Start();
Console.WriteLine("");
await next();
Console.WriteLine("");
watch.Stop();
Console.WriteLine($"it's cost:{watch.ElapsedMilliseconds.ToString()}ms."); }).Use(async(ctx,next) =>
{
Console.WriteLine("");
if (ctx.StreamData!=null)
{
foreach (var data in ctx.StreamData)
{
Console.WriteLine(Encoding.UTF8.GetString(data));
}
}
await ctx.WriteStreamAsync(new List<byte[]>()
{
Encoding.UTF8.GetBytes("Hello Word!"),
Encoding.UTF8.GetBytes("")
});
Console.WriteLine("");
await next();
}).Start();
Console.Read();
host.Stop();
}
}
}
Client:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Spider.Network; namespace Spider.Client
{
class Program
{
static void Main(string[] args)
{
Stopwatch watch = new Stopwatch();
watch.Start();
Test();
Console.WriteLine(watch.ElapsedMilliseconds.ToString());
Console.Read();
watch.Stop();
} private static async void Test(int count)
{
List<Task> list=new List<Task>();
for (int i = ; i < count; i++)
{
var t=await Task.Factory.StartNew(async() =>
{
using (var client=new TcpClient(IPAddress.Parse("127.0.0.1"), , ))
{
byte[] Fun(string msg)
{
StringBuilder buffer = new StringBuilder();
for (int k = ; k < ; k++)
{
buffer.Append(msg);
} return Encoding.UTF8.GetBytes(buffer.ToString());
}
//var bytes1=await client.RequestAsync(Fun("abc"));
//var bytes2 = await client.RequestAsync(Fun(""));
IList<byte[]> stream= await client.StreamRequestAsync(new List<byte[]>()
{
Encoding.UTF8.GetBytes(""),
Encoding.UTF8.GetBytes("abc"),
});
//Console.WriteLine(Encoding.UTF8.GetString(bytes1));
//Console.WriteLine(Encoding.UTF8.GetString(bytes2));
Console.WriteLine(Encoding.UTF8.GetString(stream[]));
Console.WriteLine(Encoding.UTF8.GetString(stream[]));
}
});
list.Add(t);
}
Task.WaitAll(list.ToArray());
} }
}
特别提醒:
如果发现任何问题和不足之处或者BUG请email给我:kingge163@163.com
https://files.cnblogs.com/files/kingge/HSocket.Core.Newest.Test.7z
高性能异步Socket框架的更多相关文章
- Voovan 是一个高性能异步网络框架和 HTTP(Java)
Voovan 是一个高性能异步网络框架和 HTTP 服务器框架,同时支持 HTTP 客户端抓取.动态编译支持.数据库访问封装以及 DateTime.String.Log.反射.对象工具.流操作.文件操 ...
- 一个高性能异步socket封装库的实现思路 (c#)
前言 socket是软件之间通讯最常用的一种方式.c#实现socket通讯有很多中方法,其中效率最高就是异步通讯. 异步通讯实际是利用windows完成端口(IOCP)来处理的,关于完成端口实现原理, ...
- 《Unity 3D游戏客户端基础框架》多线程异步 Socket 框架构建
引言: 之前写过一个 demo 案例大致讲解了 Socket 通信的过程,并和自建的服务器完成连接和简单的数据通信,详细的内容可以查看 Unity3D -- Socket通信(C#).但是在实际项目应 ...
- 写自己的Socket框架(一)
本系列仅介绍可用于生产环境的C#异步Socket框架,如果您在其他地方看到类似的代码,不要惊讶,那可能就是我在参考开源代码时,直接“剽窃”过来的. 1.在脑海里思考一下整个socket的链接的处理流程 ...
- 【转】C#高性能大容量SOCKET并发(二):SocketAsyncEventArgs封装
http://blog.csdn.net/sqldebug_fan/article/details/17557341 1.SocketAsyncEventArgs介绍 SocketAsyncEvent ...
- C#高性能大容量SOCKET并发(二):SocketAsyncEventArgs封装
原文:C#高性能大容量SOCKET并发(二):SocketAsyncEventArgs封装 1.SocketAsyncEventArgs介绍 SocketAsyncEventArgs是微软提供的高性能 ...
- Java异步NIO框架Netty实现高性能高并发
原文地址:http://blog.csdn.net/opengl_es/article/details/40979371?utm_source=tuicool&utm_medium=refer ...
- 可扩展多线程异步Socket服务器框架EMTASS 2.0 续
转载自Csdn:http://blog.csdn.net/hulihui/article/details/3158613 (原创文章,转载请注明来源:http://blog.csdn.net/huli ...
- C# 实现的多线程异步Socket数据包接收器框架
转载自Csdn : http://blog.csdn.net/jubao_liang/article/details/4005438 几天前在博问中看到一个C# Socket问题,就想到笔者2004年 ...
随机推荐
- 最新阿里云申请免费SSL证书实现网站HTTPS化(图文教程一)
一.申请免费SSL证书: 1.登录阿里云: 2.领取代金券礼包: https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=0a ...
- 删除打开方式里的wine
title: "删除打开方式里的wine" date: 2018-05-27T13:54:28+08:00 tags: ["wine"] categories: ...
- elastic-job集成到springboot教程,和它的一个异常处理办法:Sharding item parameters '1' format error, should be int=xx,int=xx
先说这个Sharding item parameters '1' format error, should be int=xx,int=xx异常吧,这是在做动态添加调度任务的时候出现的,网上找了一会没 ...
- Openstack oslo.config【一】
OpenStack的项目貌似越来越多了,在Grizzly版之前,每个项目都得实现一套处理配置文件的代码.在每个项目的源码中基本上都可以找到openstack/common/cfg.py,inipars ...
- OpenStack-Neutron-VPNaaS-代码
目前juno只支持ipsec的vpn 但是其实稍微修改代码pptp/openvpn/gre也都是可以支持的,下面看看vpn服务的代码流程: 默认我们创建好了ide策略.ipsec策略和vpn服务,因 ...
- 网络-02-端口号-linux端口详解大全
端口详解 1 tcpmux TCP Port Service Multiplexer 传输控制协议端口服务多路开关选择器 2 compressnet Management Utility compr ...
- 2017.11.19 C语言基础及流水灯实现
/* 从右往左*/ #include <reg52.h> sbit ADDR0 = P1^0; sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADD ...
- vb配置下位机CAN寄存器小结
2011-12-14 18:44:32 效果图 1,完成设计(由于没有eeprom等存储设备,所以每次上电后需要通过串口配置某些寄存器).在设计中,列出技术评估难度,并进行尝试,参看<我的设计& ...
- C博客作业03--函数
1. 本章学习总结 1.1 思维导图 1.2 本章学习体会及代码量学习体会 1.2.1 学习体会 这几周学习了函数,题目还是原样只是多了种做题的方法.一开始看书感觉声明,定义啊,还有全局变量那些,文绉 ...
- java中的getStackTrace和printStackTrace的区别
getStackTrace()返回的是通过getOurStackTrace方法获取的StackTraceElement[]数组,而这个StackTraceElement是ERROR的每一个cause ...