FastSocket.Net
Overview
FastSocket是一个轻量级易扩展的c#异步socket通信库,项目开始于2011年,经过近3年不断调整与改进,目前在功能和性能上均有不错的表现。
项目地址:https://github.com/devhong/FastSocket.Net
FastSocket内置了命令行、二进制、thrift协议,基于此开发了Zookeeper, Redis, Thrift等c#异步客户端,接下来将会一一公开。
Requirements
.Net 4.0 or Mono 2.6
Example Usage
简单的命令行服务
新建控制台项目,添加FastSocket.SocketBase,FastSocket.Server引用
自定义服务实现MyService
using System;
using Sodao.FastSocket.Server;
using Sodao.FastSocket.Server.Command;
using Sodao.FastSocket.SocketBase; /// <summary>
/// 实现自定义服务
/// </summary>
public class MyService : CommandSocketService<StringCommandInfo>
{
/// <summary>
/// 当连接时会调用此方法
/// </summary>
/// <param name="connection"></param>
public override void OnConnected(IConnection connection)
{
base.OnConnected(connection);
Console.WriteLine(connection.RemoteEndPoint.ToString() + " connected");
connection.BeginSend(PacketBuilder.ToCommandLine("welcome"));
}
/// <summary>
/// 当连接断开时会调用此方法
/// </summary>
/// <param name="connection"></param>
/// <param name="ex"></param>
public override void OnDisconnected(IConnection connection, Exception ex)
{
base.OnDisconnected(connection, ex);
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(connection.RemoteEndPoint.ToString() + " disconnected");
Console.ForegroundColor = ConsoleColor.Gray;
}
/// <summary>
/// 当发生错误时会调用此方法
/// </summary>
/// <param name="connection"></param>
/// <param name="ex"></param>
public override void OnException(IConnection connection, Exception ex)
{
base.OnException(connection, ex);
Console.WriteLine("error: " + ex.ToString());
}
/// <summary>
/// 处理未知命令
/// </summary>
/// <param name="connection"></param>
/// <param name="commandInfo"></param>
protected override void HandleUnKnowCommand(IConnection connection, StringCommandInfo commandInfo)
{
commandInfo.Reply(connection, "unknow command:" + commandInfo.CmdName);
}
}
Exit命令
/// <summary>
/// 退出命令
/// </summary>
public sealed class ExitCommand : ICommand<StringCommandInfo>
{
/// <summary>
/// 返回命令名称
/// </summary>
public string Name
{
get { return "exit"; }
}
/// <summary>
/// 执行命令
/// </summary>
/// <param name="connection"></param>
/// <param name="commandInfo"></param>
public void ExecuteCommand(IConnection connection, StringCommandInfo commandInfo)
{
connection.BeginDisconnect();//断开连接
}
}
App.config配置
<?xml version="1.0"?>
<configuration> <configSections>
<section name="socketServer"
type="Sodao.FastSocket.Server.Config.SocketServerConfig, FastSocket.Server"/>
</configSections> <socketServer>
<servers>
<server name="cmdline"
port="8400"
socketBufferSize="8192"
messageBufferSize="8192"
maxMessageSize="102400"
maxConnections="20000"
serviceType="CommandLine.MyService, CommandLine"
protocol="commandLine"/>
</servers>
</socketServer> </configuration>
初始化及启动服务
static void Main(string[] args)
{
SocketServerManager.Init();
SocketServerManager.Start(); Console.ReadLine();
}
启动服务,然后在cmd中运行telnet 127.0.0.1 8400, 运行截图如下:


其中welcome中当连接建立时服务端发送到终端的。
connection.BeginSend(PacketBuilder.ToCommandLine("welcome"));
unknow command:Hello是因为没有对应的"Hello"命令实现由HandleUnKnowCommand输出的
/// <summary>
/// 处理未知命令
/// </summary>
/// <param name="connection"></param>
/// <param name="commandInfo"></param>
protected override void HandleUnKnowCommand(IConnection connection, StringCommandInfo commandInfo)
{
commandInfo.Reply(connection, "unknow command:" + commandInfo.CmdName);
}
当在终端中键入exit时,触发了ExitCommand.ExecuteCommand方法,服务端主动断开连接,终端退出。
FastSocket.Net的更多相关文章
- FastSocket学习笔记~再说客户端与服务端的组成
废话多说 很久之前,我写过几篇FastSocket的文章,基本属于使用的方法,而缺乏对概念的总结讲解,而本讲就是弥补一下上几讲的不足,将核心的模块再说说,再谈谈,再聊聊! 首先FastSocket由C ...
- FASTSOCKET
FASTSOCKET It looks like there are like 3 separate optimizations, but I think the most important one ...
- FastSocket客户端/服务端通讯示例
新建控制台项目,命名为Server 添加FastSocket.SocketBase,FastSocket.Server引用 Socket命令服务类: Sodao.FastSocket.Server ...
- FastSocket学习笔记~制定自已的传输协议~续~制定基于FastSocket的协议
FastSocket这个东西上次我已经说过,它使用简单,功能强大,扩展灵活,目前在新浪的生产环境中已经被广泛使用,所以它的性能,安全等各方面我们绝对可以信赖,今天我们来说一个话题,和上一讲有关,这次我 ...
- FastSocket客户端/服务端通讯示例 客户端被动接收
示例代码参见 http://www.cnblogs.com/T-MAC/p/fastsocket-asyncbinary-usage.html 我这里只写一份客户端如何被动接收的代码. 先从As ...
- C#网络编程技术FastSocket实战项目演练
一.FastSocket课程介绍 .NET框架虽然微软提供了socket通信的类库,但是还有很多事情要自己处理,比如TCP协议需要处理分包.组包.粘包.维护连接列表等,UDP协议需要处理丢包.乱序,而 ...
- FastSocket学习笔记~RPC的思想,面向对象的灵活
首先非常感谢这位来自新浪的老兄,它开发的这个FastSocket非常不错,先不说性能如何,单说它的使用方式和理念上就很让人赞口,从宏观上看,它更像是一种远程过程的调用RPC,即服务器公开一些命令,供客 ...
- Raknet是一个基于UDP网络传输协议的C++网络库(还有一些其它库,比如nanomsg,fastsocket等等)
Raknet是一个基于UDP网络传输协议的C++网络库,允许程序员在他们自己的程序中实现高效的网络传输服务.通常情况下用于游戏,但也可以用于其它项目. Raknet有以下好处: 高性能 在同一台计算机 ...
- FastSocket学习笔记~制定自已的传输协议
对于TCP或者UDP来说,它们作于传输层的协议,有着自己的标准,或者叫格式,在我们看TCP格式之前先了解一下计算机的基础知识,字节,它是计算机世界的一个小单位,也是我们可以理会到的,如一个utf-8英 ...
随机推荐
- QT自定义精美换肤界面
陆陆续续用QT开发过很多项目,也用QT写过不少私活项目,也写过N个工具,一直梦寐以求能像VC一样可以很方便的有个自定义的界面,QSS的强大让我看到了很好的希望,辗转百度谷歌无数次,一直搜索QT相关的换 ...
- [ucgui] 对话框8——Framewin小工具
>_<" 这里主要是窗口小工具Framewin的用法介绍,包括创建背景窗口及其消息回调函数,创建Frame窗口并设置其回调函数,这里一些其他的功能被我注释掉了,有向状态栏添加最大 ...
- [BTS] WCF-SAP adapter
=================================== Exception has been thrown by the target of an invocation. (mscor ...
- 基于iscroll.js实现下拉刷新和上拉加载特效
现在已经不是纯Android独霸天下的时代了,H5嵌入Android的Hybrid混合开发是大势所趋.今天给大家带来的就是移动端中常见的"上拉刷新,下拉加载"特效,这个特效将会基于 ...
- H5常用代码:适配方案1
在工作中接到H5项目,第一件想到的事就应该是屏幕适配问题,解决了屏幕适配,接下来的事才能真正开始.从此篇博客开始会连续记录下我经常用到的一些适配方案. 对于传统的PC项目,直接在移动端打开也都是会以视 ...
- 菜鸟学习WCF笔记-Address
终结点是WCF最为核心的对象,因为它承载了所有通信功能.服务通过相应的终结点发布出来,客户端通过与之匹配的终结点对服务进行调用.终结点有地址.绑定和契约ABC三要素构成. Address 作为终结点 ...
- Java并发包中Lock的实现原理
1. Lock 的简介及使用 Lock是java 1.5中引入的线程同步工具,它主要用于多线程下共享资源的控制.本质上Lock仅仅是一个接口(位于源码包中的java\util\concurrent\l ...
- 05管理登录名&服务器固定角色-大话数据库
大纲:学习如何利用SSMS快速自学T-SQL,先看看都有那些服务器固定角色,并且都是干啥的,如何把windows系统用户增加为登录名,单独新建登录名,修改登录名,删除登录名,将角色&登录名进行 ...
- DotNet中人民币符号的输出
DotNet中人民币符号“¥”的输出<html> <head>DotNet中人民币符号的输出</head> <body> <p>¥100元& ...
- XMPP系列2:如何掌握XMPP协议
michaely 回答于 2012-08-07 08:34 举报我要说的是:1.任何一个协议想学习并熟练掌握,都不是一天两天的事情.2.XMPP协议现在已经有很多成熟的架构和客户端,无需重新造轮子.3 ...