今天准备给大家介绍一个c#服务器框架(SuperSocket)和一个c#客户端框架(SuperSocket.ClientEngine).这两个框架的作者是园区里面的江大渔. 首先感谢他的无私开源贡献.之所以要写这个文章是因为群里经常有人问这个客户端框架要如何使用.原因在于服务端框架的文档比较多,客户端的文档比较少,所以很多c#基础比较差的人就不懂怎么玩起来.今天就这里写一个例子希望能给部分人抛砖引玉吧. 参考资料: SuperSocket文档 http://docs.supersocket.ne…
参考资料说明 SuperSocket文档 http://docs.supersocket.net/ Protobuf语言参考 https://developers.google.com/protocol-buffers/docs/proto 单消息多类型解决方案 https://developers.google.com/protocol-buffers/docs/techniques# 主要资料(非常感谢) http://www.cnblogs.com/caipeiyu/p/5559112.h…
         Socket里面的协议解析是Socket通讯程序设计中最复杂的地方,如果你的应用层协议设计或实现不佳,Socket通讯中常见的粘包,分包就难以避免.SuperSocket内置了命令行格式的协议CommandLineProtocol,如果你使用了其它格式的协议,就必须自行实现自定义协议CustomProtocol.看了一篇文档之后, 你可能会觉得用 SuperSocket 来实现你的自定义协议并不简单. 为了让这件事变得更容易一些, SuperSocket 提供了一些通用的协议解…
内置的命令行协议(接受自定义,分隔符为“:”,“,”): 命令行协议定义了每个请求必须以回车换行结尾 "\r\n". 由于 SuperSocket 中内置的命令行协议用空格来分割请求的Key和参,因此当客户端发送如下数据到服务器端时: "LOGIN kerry 123456" + NewLine SuperSocket 服务器将会收到一个 StringRequestInfo 实例,这个实例的属性为: Key: "LOGIN" Body: &quo…
protobuf和thrift类似,也是一个序列化的协议实现,简称PB(下文出现的PB代表protobuf). Github:https://github.com/google/protobuf 上图,说明一下protobuf协议. PB以“1-5个字节”的编号和类型开头,格式:编号左移3位和类型取或得到. 编号是什么? 编号就是 定义的proto文件中各个字段的编号. 如: 类型是什么? 类型就是 定义的proto文件中各个字段类型,使用3位表示类型,可以表示0到7,共8种类型,PB类型只用了…
netty 默认支持protobuf 的封装与解码,如果通信双方都使用netty则没有什么障碍,但如果客户端是其它语言(C#)则需要自己仿写与netty一致的方式(解码+封装),提前是必须很了解netty是如何进行封装与解码的.这里主要通过读源码主要类ProtobufVarint32FrameDecoder(解码)+ProtobufVarint32LengthFieldPrepender(封装) 来解析其原理与实现. 文章来源http://www.cnblogs.com/tankaixiong…
软件环境:Goland Github地址 一.目的 之前用纯逻辑垒完了一个可登入登出的在线多人聊天室(代码仓库地址),这次学习了Protobuf协议,于是想试着更新下聊天室的版本. 主要目的是为了掌握Protobuf的使用. 二.设计思路 通过Protobuf中内置好的编码函数,将要发送的数据进行编码,之后在“编码后的”数据前加入协议号和报头,再转码通过Write与Read函数进行数据的发送和接收. 1,先写好服务端中的监听(Listen)端口函数与客户端上的网络拨号(Dial)函数: 2,客户…
<从零开始搭建游戏服务器>自定义兼容多种Protobuf协议的编解码器 直接在protobuf序列化数据的前面,加上一个自定义的协议头,协议头里包含序列数据的长度和对应的数据类型,在数据解包的时候根据包头来进行反序列化. 1.协议头定义 关于这一块,我打算先采取比较简单的办法,结构如下:  协议号是自定义的一个int类型的枚举(当然,假如协议吧比较少的话,可以用一个short来代替int以缩小数据包),这个协议号与协议类型是一一对应的,而协议头通常使用数据总长度来填入,具体过程如下: 当客户端…
l  定义一个消息(message)类型 l  标量值类型 l  Optional 的字段及默认值 l  枚举 l  使用其他消息类型 l  嵌套类型 l  更新一个消息类型 l  扩展 l  包(package) l  定义服务(service) l  选项(option) l  生成访问类 本指南描述了怎样使用protocolbuffer语言来构造你的protocol buffer数据,包括.proto文件语法以及怎样生成.proto文件的数据访问类. 本文是一个参考指南——如果要查看如何使…
Protobuf协议,全称:Protocol Buffer 它跟JSON,XML一样,是一个规定好的数据传播格式.不过,它的序列化和反序列化的效率太变态了…… 来看看几张图你就知道它有多变态. Protobuf的Java实例 一. 安装Protobuf 去Protobuf的GitHub下载,解压. 如果你是Windows环境,则还要下载多一个东西.protobuf-2.5.0-windows.zip. 解压protobuf-2.5.0-windows.zip,把protoc.exe放在Proto…
Protobuf应用广泛,尤其作为网络通讯协议最为普遍.本文将详细描述几个让人眼前一亮的protobuf协议设计,对准备应用或已经应用protobuf的开发者会有所启发,甚至可以直接拿过去用. 这里描述的协议设计被用于生产环境的即时通讯.埋点数据采集.消息推送.redis和mysql数据代理.   Bwar从2013年开始应用protobuf,2014年设计了用于mysql数据代理的protobuf协议,2015年设计了用于即时通讯的protobuf协议.高性能C++ IoC网络框架Nebula…
本文的第一部分将介绍protobuf使用基础以及如何利用protobuf设计通信协议.第二部分会给出smss项目的协议设计规范和源码讲解. 一.Protobuf使用基础 什么是protobuf protobuf是谷歌研发的一种数据序列化和存储技术.主要可以用来解决网络通讯中异构系统的通讯和数据持久化,与同类技术相比(JSON或XML),官方宣称的数据量长度减少3~10倍,运算速度20~100倍.由于与平台无关,因此非常适合使用在多系统的交互中. 目前常见的使用版本是2和3,个人推荐如果你打算在项…
背景:需要用django基于python3模拟一个http接口,请求是post方式,body是protobuf string,返回也是protobuf string 设计:django获取pb string的post body反序列化成json,通过json里面的指定字段的值获取对应的返回json, 并将返回的json序列化成pb string 重点:需要用python实现基于protobuf协议将json转化为pb string,将pb string转成json 步骤: 1.安装protobu…
Protobuf协议,全称:Protocol Buffer 它跟JSON,XML一样,是一个规定好的数据传播格式.不过,它的序列化和反序列化的效率太变态了…… 来看看几张图你就知道它有多变态.  protobuf 协议 操作步骤: 定义protobuf 文件,并使用protoc.exe 编译 为java文件. protoc.exe 下载地址 https://github.com/google/protobuf/releases 下载protoc-3.6.0-win32.zip 新建maven项目…
目录 Protobuf 协议浅析 1. Protobuf 介绍 1.1 Protobuf 基本概念 1.2 Protobuf 的优点 1.3 Protobuf, JSON, XML 的区别 2. Protobuf 基本语法 2.1 pb 文件的构成 2.2 消息对象 2.2.1 字段修饰符 2.2.2 字段类型 2.2.3 标识号 2.3 使用 protobuf 编译器编译 pb 文件 3. Protobuf 序列化原理 3.1 Protobuf 编码结构 3.2 Varint 编码 3.2.1…
目录 简介 定义protobuf 定义handler 设置ChannelPipeline 构建client和server端并运行 总结 简介 netty中有很多适配不同协议的编码工具,对于流行的google出品的protobuf也不例外.netty为其提供了ProtobufDecoder和ProtobufEncoder两个工具还有对应的frame detection,接下来我们会通过一个例子来详细讲解如何在netty中使用protobuf. 定义protobuf 我们举个最简单的例子,首先定义一…
前言 在你学习爬虫的知识过程中是否遇到下面的类型.如果有兴趣学习一下或者了解相关知识的,且不嫌在下才疏学浅,可以参考一下.欢迎各位网友的指正. 首先叙述一下问题的会出现的式样. 你可能会在请求参数中看到如下乱码的行为: 接着你会发现content-type数据类型为x-protobuf类型,那么可能你可能需要学习一下protobuf协议才能继续你的爬虫. 那么接下来我们叙述一下为什么会出现这个问题呢? 我不知道这样说下是否正确,仅供参考吧,可以提供一种思路.先说一个正常数据的content-ty…
SuperSocket\SocketBase\Protocol\TerminatorReceiveFilter.cs /// <summary> /// Filters received data of the specific session into request info. /// </summary> /// <param name="readBuffer">The read buffer.</param> /// <pa…
先看最终效果 wireshark是开源的,而且在Windows下安装时用的是64位,所以相应的库文件需要使用64位. 一个Lua插件的Dissector结构大致如下: do -- 协议名称为 m_MeteoricProto,在Packet Details窗格显示为 XXX Protocol local struct = Struct local data_dis = Dissector.get("data") local m_MeteoricProto = Proto("me…
1. 下载protobuf https://code.google.com/p/protobuf/downloads/list Protocol Buffers 2.5.0 full source -- C++, Java, Python      -> 代码 2.在VS2005下,创建两个新的工程,分别命名为server和client,每个工程都需要引用protobuf的文件 添加protobuf文件操作:右击项目 -> 属性 -> 配置属性 -> C/C++ -> 常规 …
目录 整体结构说明 protobuf2文件 golang客户端 目录结构 生成pb.go文件 main.go util.go java服务端 目录结构 pom.xml application.yml NettyConfig.java 生成Helloworld.java SocketServerHandler.java NettyServerListener.java Application.java 测试 因为设备的通信协议准备采用protobuf,所以准备这篇protobuf的使用入门,gol…
使用maven编译protobuf所需要的jar包 1. 安装配置maven (1)下载maven        http://maven.apache.org/    版本:apache-maven-2.2.1 (2)添加maven到环境变量 (3)用mvn -version 查看是否成功 2. 下载protobuf https://code.google.com/p/protobuf/downloads/list Protocol Buffers 2.5.0 compiler -- Wind…
久以来,.Net开发人员都非常羡慕Java有Netty这样,高效,稳定又易用的网络通信基础框架.终于微软的Azure团队,使用C#实现的Netty的版本发布.不但使用了C#和.Net平台的技术特点,并且保留了Netty原来绝大部分的编程接口.让我们在使用时,完全可以依照Netty官方的教程来学习和使用DotNetty应用程序.DotNetty同时也是开源的,它的源代码托管在Github上:https://github.com/azure/dotnetty 0x01 项目预览 从github上下载…
SuperSocket 提供了一些通用的协议解析工具, 你可以用他们简单而且快速的实现你自己的通信协议: TerminatorReceiveFilter (SuperSocket.SocketBase.Protocol.TerminatorReceiveFilter, SuperSocket.SocketBase) CountSpliterReceiveFilter (SuperSocket.Facility.Protocol.CountSpliterReceiveFilter, SuperSo…
SuperSocket 是一个轻量级, 跨平台而且可扩展的 .Net/Mono Socket 服务器程序框架.你无须了解如何使用 Socket, 如何维护 Socket 连接和 Socket 如何工作,但是你却可以使用 SuperSocket 很容易的开发出一款 Socket 服务器端软件,例如游戏服务器,GPS 服务器, 工业控制服务和数据采集服务器等等. PS:上面这句话复制官网的,好了,总之告诉大家SuperSocket已经很强大.很稳定.方便. 如果你没有Socket基础,首先要了解协议…
近几日想在一个项目中引进一个Socket Server,用来接收客户端发送的命令消息并根据具体的业务逻辑对消息进行处理,然后转发给其它在线的客户端.因为以前在博客园关注过江大渔开源的SuperSocket,后来便在Github和Codeplex上一直关注该项目,但仅仅限于关注和了解.这次想通过具体的实践进一步学习该框架.我觉得一个优秀的开源项目离不开漂亮的代码.清晰的文档.完善的测试.持续的更新,当然从普通走向卓越更离不开社区的支持(源码.宣传.案例及文档等).而SuperSocket对我个人而…
什么是SuperSocket SuperSocket(下文简称SS)是一个轻量级, 跨平台而且可扩展的 .Net/Mono Socket 服务器程序框架.你无须了解如何使用 Socket, 如何维护 Socket 连接和 Socket 如何工作,但是你却可以使用 SuperSocket 很容易的开发出一款 Socket 服务器端软件,例如游戏服务器,GPS 服务器, 工业控制服务和数据采集服务器等等. 功能特点 高性能的事件驱动通信; 非常简单易用; 你只需要通过创建几个类就能获得一个健壮的 S…
如何快速启动第一个程序 既然是快速入门,所以,对于太深奥的知识点将不做讲解,会在后续的高级应用章节中,会对SS进行拆解.所有的实例90%都是来自SS的实例,外加本人的注释进行讲解. 一般应用而言,你只需掌握五点就够了,如果SS内置的协议模板已经够用,你可以无视第5条. 如何配置AppServer的启动信息(如端口.字符编码等等.) 至少掌握一种启动SS的方式. 建立自己的应用服务器. 掌握命令和命令加载器. 掌握如何实现自定义协议 下面是一个简单启动SS的方法,并向请求的客户端发送欢迎词的例子,…
    在SuperSocket入门(二)中我们已经简单了解了通过配置App.config文件使用BootStrap启动SuperSocket服务.我们先来看一下上个案例中的基本配置文件示例: <?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <!--log 日志记录--> <section name="log…
第一次使用Socket,遇到过坑,也涨过姿势,网上关于SuperSocket的教程基本都停留在官方给的简单demo上,实际使用还是会碰到一些问题,所以准备写两篇博客,分别来介绍SuperSocket以及实际的案例应用,应用中我还遇到一些问题,还没解决,还请有经验的指出问题 --------------------------------------------------------------------------------begin----------------------------…