NewLife.Net——构建可靠的网络服务

来源:大石头

cnblogs.com/nnhy/p/newlife_net_agent.html

源码地址:https://github.com/nnhy/NewLife.Net.Tests

左边窗口就是这次要讲的网络服务程序,工作在调试模式。

右边窗口是上一次的EchoTest客户端,连接左边网络服务。

服务名、显示名、描述,就这么多!

ThreadCount = 2指定两个工作线程,Intervals指定它们的轮询周期分别是1秒和5秒

系统服务的标准动作就是启动和停止

MyNetServer _Server;

/// 开始服务

///

protected override void StartWork(String reason)

{

// 实例化服务端,指定端口,同时在Tcp/Udp/IPv4/IPv6上监听

var svr = new MyNetServer

{

Port = 1234,

Log = XTrace.Log

};

svr.Start();

_Server = svr;

base.StartWork(reason);

}

/// 停止服务

///

protected override void StopWork(String reason)

{

_Server.TryDispose();

_Server = null;

base.StopWork(reason);

}

/// 调度器让每个任务线程定时执行Work,index标识任务

///

///

public override Boolean Work(Int32 index)

{

switch (index)

{

case 0: ShowStat(_Server); break;

case 1: SendTime(_Server); break;

}

return false;

}

private String _last;

/// 显示服务端状态

///

private void ShowStat(NetServer ns)

{

var msg = ns.GetStat();

if (msg == _last) return;

_last = msg;

WriteLog(msg);

}

/// 向所有客户端发送时间

///

private void SendTime(NetServer ns)

{

var str = DateTime.Now.ToFullString() + Environment.NewLine;

var buf = str.GetBytes();

ns.SendAllAsync(buf);

}

二、开发调试

既然是控制台项目,先跑起来看看:

红色字体显示重要信息,黄色字体显示菜单,常用功能是235。

我们选择5,循环调试,其实就是在控制台里面模拟服务工作流程,让网络服务跑起来。

底下日志可以看到,它监听了4个套接字。

2、是安装服务,也就是把当前应用安装成为Windows服务,这里特别注意,一般需要管理员权限,才能安装成功,除非关闭系统UAC。

3、是启动服务,只有在安装了服务之后,才能看到。

所以,XAgent程序,既是开发调试控制台程序,也是安装卸载、启动停止服务的操作台,更是Windows服务程序本身!

细心的同学可以发现,安装好的Windows服务实质上就是 EchoAgent.exe -s,带有-s参数。

三、安装服务

最后,我们把它安装到一台公网服务器上,tcp://net.newlifex.com:1234,telnet上去看看效果

从日志文件可以看到,它的应用类型 ApplicationType 是 Service,也就是Windows Service。

下面的日志,在A0线程(也就是0号任务线程)输出服务端状态。

在线1/1,当前在线/最大在线

发送 2/20/0,共发送2次,最大速度每秒20字节,当前速度每秒0字节

既然有A0线程,同样也会有A1,还会有An(ThreadCount>n),可用于区分不同任务线程输出的日志。

至此,我们的Windows网络服务程序开发完成,并安装到公网服务器上,持续对外提供Echo服务!

看完本文有收获?请转发分享给更多人

关注「DotNet」,提升.Net技能

淘口令:复制以下红色内容,再打开手淘即可购买

范品社,使用¥极客T恤¥抢先预览(长按复制整段文案,打开手机淘宝即可进入活动内容)

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180511B0UHSM00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券