高性能异步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年 ...
随机推荐
- 18.12.09-C语言练习:黑洞数 / Kaprekar问题
题目: 程序: #include <stdio.h> int main(void) { int n, a, b, c, t, A, B; printf("输入一个三位数整数:&q ...
- git宝典—应付日常工作使用足够的指北手册
最近公司gitlab又迁移,一堆git的命令骚操作,然鹅git命令,感觉还是得复习下——其实,git现在界面操作工具蛮多,比如intellij 自带的git操作插件就不错,gitlab github ...
- 在sql中case子句的两种形式
case子句,在select后面可以进行逻辑判断. 两种形式:判断相等.判断不等 一.判断相等的语法: case 列名 when ... then ... when ... then ... el ...
- IT题库3-线程实现的方式
1.继承Thread类创建线程 Thread类本质上是实现了Runnable接口的一个实例,代表一个线程的实例.启动线程的唯一方法就是通过Thread类的start()实例方法.start()方法是一 ...
- intellij idea 官方帮助文档翻译(前言)
对于java程序员来说,intellj idea这个编辑器,应该很多人都听说过,但用的人似乎并不是很多. 这也没办法,毕竟现在网上的教程,培训班授课,大多还是以eclipse为主. eclipse固然 ...
- Kindle:自动追更之Calibre2脚本
#!/usr/bin/env python2 # vim:fileencoding=utf-8 from __future__ import unicode_literals, division, a ...
- .Net Core技术研究-Span<T>和ValueTuple<T>
性能是.Net Core一个非常关键的特性,今天我们重点研究一下ValueTuple<T>和Span<T>. 一.方法的多个返回值的实现,看ValueTuple<T> ...
- 纪念一下学写pipeline时脑子里的坑
用的是filespipeline,用的存储地址是images的地址 测试煎蛋ooxx首页,shell测试的时候返回很多列表,但是实际爬的时候一直只返回一条,很烦,一直测一直测,就是不行,后来才发现,首 ...
- DNS 本质
DNS 本质: 层级分布式数据库
- .NET Core 微服务
github 上的资源: EshopOnContainers AiurSoft : 微服务框架 Server酱:是一款「程序员」和「服务器」之间的通信软件. http://sc.ftqq.com/3. ...