当你用SuperSocket实现自己的socket服务器时,不可避免地要在配置文件中定义一些参数。SuperSocket提供一种简单的方式来存储你配置文件中的参数,然后在AppServer中读取并使用它们。
2013年3月18日
2013年3月17日
SuperSocket的研究(9)—— 向客户主动端推送数据
使用Session对象向客户端发送数据
我们已经提到过,AppSession表示一个逻辑socket连接,基于连接的各种操作应该被定义在这个类中。AppSession也封装了一些发送数据的方法。你可以是使用AppSession的Send(...)方法来向客户端发送数据。
session.Send(data, 0, data.Length); //或者 session.Send("Welcome to use SuperSocket!");
2013年3月16日
SuperSocket的研究(8)—— 获取连接的建立和关闭事件
AppSession中的OnSessionStarted()和OnSessionClosed(CloseReason reason)虚方法
你可以覆盖父类中的虚方法,OnSessionStarted()和OnSessionClosed(CloseReason reason)来处理新会话的连接或会话的销毁时的业务操作:
public class TelnetSession : AppSession<TelnetSession> { protected override void OnSessionStarted() { this.Send("Welcome to SuperSocket Telnet Server"); //添加你的业务操作 } protected override void OnSessionClosed(CloseReason reason) { //添加你的业务操作 } }
AppServer中的NewSessionConnected和SessionClosed事件
绑定事件:
appServer.NewSessionConnected += new SessionHandler<AppSession>(appServer_NewSessionConnected); appServer.SessionClosed += new SessionHandler<AppSession, CloseReason>(appServer_SessionClosed);
定义事件处理方法
static void appServer_SessionClosed(AppSession session, CloseReason reason) { Console.WriteLine("A session is closed for {0}.", reason); } static void appServer_NewSessionConnected(AppSession session) { session.Send("Welcome to SuperSocket Telnet Server"); }
SuperSocket的研究(7)—— 内置的通用格式协议实现工具
在阅读过前面的文档后,你可能会发现用SuperSocket来实现你自己的协议可能并不那么容易。SuperSocket提供一些通用协议工具来简化这项工作,它能让你更快、更轻松地构建自己的协议。
WAVE文件结构与《女仆咖啡帕露菲Re-Order》BGM提取
前几天在PSP上把《帕露菲》所有线都通了,以前玩过的《青空下的约定》也是GIGA做的。不得不说这个公司做GalGame是相当的厚道:可以无限制回溯上一选择肢,每个选择肢上都标注的有该事件的主要人物,一直选某一个角色的事件,就能走到该角色的结局。这个方法在攻略《青空》时百试不爽,不过《帕露菲》就不太行得通了。不过《帕露菲》也提供了更详细的选择肢提示:每个事件不仅有主要参与任务头像,还有该事件对结局的影响,例如:由飞TRUE NORMAL END;明日香日常事件。GIGA并不打算把玩家引入选择肢的迷宫在里面鬼打墙,而是让玩家把精力集中到品味剧本、音乐上来。从这个角度来看,GIGA算得上是业界良心,比那《恋爱蜡笔》不知高到哪里去了。
2013年3月14日
SuperSocket的研究(6) —— 用IRequestInfo,IReceiveFilter等实现自己的通信协议
为什么使用自己的通信协议?
通信协议用来将接收到的二进制数据转换成你的应用能够理解的请求。SuperSocket提供了一个内置的通信协议“命令行协议”,它规定每个请求必须以回车换行符“\r\n”结束。
但是一些应用可能因为各种不同的原因而无法使用“命令行协议”。针对这种情况,你需要用如下的工具来实现自己的通信协议:
- RequestInfo
- ReceiveFilter
- ReceiveFilterFactory
- AppServer
- AppSession
2013年3月13日
SuperSocket的研究(5)—— 内置的命令行协议
什么是协议
什么是协议?很多人也许会回答“TCP”或“UDP”。但构建一个网络应用仅靠TCP或者UDP是不够的。TCP和UDP都是传输层协议。如果你仅仅定义了传输层协议,是远不能满足让两个终端用户在网络上通信的。你需要定义你的应用层的协议以转换你接收到的二进制数据,使之成为你的应用能理解的请求。
2013年3月12日
其来有自的音乐库(3)
- ARMS - I''s Pure Original Sound Track
《I''s》是桂正和的漫画作品,当年与鸟山明齐名。我对这部漫画的评价是:它真实地反映了青春期少年的正常心理活动,就像发生在你的身边,甚至发生在你自己身上。除了主人公的损友有点夸张外,不太符合现实,一贵作为主人公,是典型的“时刻YY女神又不敢贸然行动的闷骚少年”。我敢说只要你是一个正常、健康的人,并且正常地经历过青春期的萌动,你一定能对号入座,会在男女主人公身上找到自己的影子。而张OST是我在看了动漫后搜集来的,年代久远,专辑封面分辨率不高。推荐的曲子嘛,首先是主题曲、也是动漫和游戏的OP——《二人のI''s~i will follow~》;然后是《VIVRE》、《LE BONHEUR》、《LE LOCOMOTION》等BGM及其变奏版。貌似这些都是法语,曲名就意义不明了。
SuperSocket的研究(4)—— SuperSocket的基本配置
一个完整的配置文件示例
<?xml version="1.0"?> <configuration> <configSections> <section name="superSocket" type="SuperSocket.SocketEngine.Configuration.SocketServiceConfig, SuperSocket.SocketEngine" /> </configSections> <appSettings> <add key="ServiceName" value="SupperSocketService" /> </appSettings> <superSocket> <servers> <server name="TelnetServerA" serverTypeName="TelnetServer" ip="Any" port="2020"> </server> <server name="TelnetServerB" serverTypeName="TelnetServer" ip="Any" port="2021"> </server> </servers> <serverTypes> <add name="TelnetServer" type="SuperSocket.QuickStart.TelnetServer_StartByConfig.TelnetServer, SuperSocket.QuickStart.TelnetServer_StartByConfig"/> </serverTypes> </superSocket> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" /> </startup> </configuration>
2013年3月9日
SuperSocket的研究(3)—— 通过配置启动SuperSocket
为什么使用配置来启动
- 拒绝硬编码(写死代码)
- SuperSocket提供多种有用的配置选项
- 充分利用SuperSocket的工具
如何通过带引导程序的配置启动服务器
SuperSocket配置结点使用.NET默认的配置技术,下面是一个为SuperSocket设计的配置结点:
<configsections> <section name="superSocket" type="SuperSocket.SocketEngine.Configuration.SocketServiceConfig, SuperSocket.SocketEngine" /> </configsections>
服务器实例配置
<supersocket> <servers> <server ip="Any" name="TelnetServer" port="2020" serverType="SuperSocket.QuickStart.TelnetServer_StartByConfig.TelnetServer, SuperSocket.QuickStart.TelnetServer_StartByConfig"> </server> </servers> </supersocket>
SuperSocket的研究(2)—— 实现自己的AppServer和AppSession
什么是AppSession和AppServer
AppSession代表一个逻辑Socket连接,基于连接的操作都应该在这个类中来定义。我们可以使用AppSession向顶层的客户端发送数据,从连接接收数据或者是关闭一个连接。
AppServer是Socket服务器的实例,它坚挺着所有客户端的连接,管理所有顶层客户端的连接。理想状况下,我们可以从AppServer中找到任意一个Session。应用级的操作和逻辑应该在这里定义。
2013年3月6日
SuperSocket的研究(1)—— Telnet实例
前几天终于把开题报告写好了,这玩意儿着实令人厌烦。你不写吧,交不了差。但写了又没多大用处,无非是抄点前人的老话、套话——你还得小心别抄袭了,不过总算是完成了。我要做的是基于WebSocekt的一个监控系统,JAVA已经有不少像Tomcat、JBoss等服务器级的支持,而.NET这边却很少。IIS8支持WebSocket,但需要WIN8,我懒得折腾系统,就找了一个开源的WebSocekt Server的实现:WebSocket4Net,是SuperWebSocket为了方便.NET程序员进行WebSocket开发而衍生的一个版本。而SuperWebSocket又是基于SuperSocket。
订阅:
博文 (Atom)