tinyfox 4.0增加socket功能
TinyFox特点
- 跨平台:支持windows、linux等常用操作系统;
- 超轻量:功能单一而明确:除了静态文件由自身处理外,其它的应用逻辑直接交给用户处理;
- 高性能:底层基于 libuv 开发,是完全的异步、非阻塞、事件驱动模型,上层代码也经过了高度优化;
- 高安全性和高稳定性:本服务器由Jexus Web Server作者开发,在很大程度上承接了JWS的高安全性和高稳定性素质;
- 支持WebSocket:开发者能很方便地利用本服务器提供基于WebSocket协议的各种性能优良、功能强大的交互式应用;
- 支持Socket:通过中间件的方式支持tcp(TinyFox 4.0才支持)
TinyFox 4.0还不是正式版,所以在Linux DotNET大本营 还没有下载链接地址,在宇大给beta版,我进行简单的试用,感觉使用还是很方便的.下面便说怎么使用的吧!
TinyFox-v4.0-beta1 使用
1.解压TinyFox-v4.0-beta1,目录内的内容稍微有些区别: 2.新增了一个 "中间件接口文档和示例" 文件夹和TinyFoxCommon.dll的动态库
看一下接口文件:
动态库文件,就是接口文件生成的,可以自己生成,这里直接使用.
3.新建一个动态库项目,命名为TcpMiddlewareApp,并添加TinyFoxCommon.dll引用,添加TcpMiddleware类.
实现ITcpMiddleware接口,在Invoke函数中,添加对tcp请求和tcp的响应
using System;
using System.Text;
using System.Threading.Tasks;
using TinyFoxCommon;
namespace TcpMiddlewareApp
{
/// <summary>
/// tcp中间件
/// </summary>
public class TcpMiddleware: ITcpMiddleware
{
private readonly ITcpMiddleware _next;
public TcpMiddleware(ITcpMiddleware next)
{
_next = next;
}
/// <summary>
/// 对socket请求的获取和响应处理
/// </summary>
/// <param name="context">tcp上下文封装请求和响应的消息</param>
/// <returns></returns>
public async Task Invoke(ITcpContext context)
{
var buffer = new byte[8192];
//context下的Reader现在在INetReader接口有AsyncRecv函数重载,在INetReader接口有AsyncRecv函数重载
Task<int> request = context.Reader.AsyncRecv(buffer); //接收消息,将消息写入到buffer中
if (request.Result > 0)
{
int count = request.Result; //根据消息的大小,重新生成一个byte数组
var msgBuf = new byte[count];
Array.Copy(buffer, msgBuf, count); //将消息复制新的数组中
string msg = Encoding.Default.GetString(msgBuf); //将消息转换成字符串 (注意:接收的编码方式,真正使用的时候应该换成utf-8)
var content = Encoding.Default.GetBytes(string.Format("hello,{0}", msg)); //注意编码方式
await context.Writer.AsyncSend(content);
}
}
}
}
4.将TcpMiddlewareApp生成,并添加到我们基于owin实现的项目,进行调试
对项目进行配置,指定启动程序为TinyFox.exe
调试监控数据
客户端,这里是用c语言实现的
分别可以Windows实现 和 Linux实现 ,只是将原先连接服务端ip和端口号,改为参数传递的方式 socket.exe 百度云盘链接: http://pan.baidu.com/s/1i5p8UGl 密码: hypg
TinyFox响应流程
秋风
2017-06-02