来源:大石头
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恤¥抢先预览(长按复制整段文案,打开手机淘宝即可进入活动内容)
领取专属 10元无门槛券
私享最新 技术干货