/// <summary> /// 开启套接字监听 /// </summary> public static void Start() { try { int port = GlobalContext.MasterSocketPort; //检查是否已经开启了端口 bool isBeUsed = SocketHelper.IsUsedIPEndPoint(port); if (isBeUsed == true) { return; } //开启 异步的启动任务,由于在内部进行了线程阻塞,所以task 永远不会complete listener = new NTCPMessage.Server.NTcpListener(new IPEndPoint(IPAddress.Any, port)); listener.DataReceived += new EventHandler <ReceiveEventArgs>(ReceiveEventHandler); listener.ErrorReceived += new EventHandler <ErrorEventArgs>(ErrorEventHandler); listener.RemoteDisconnected += new EventHandler <DisconnectEventArgs>(DisconnectEventHandler); listener.Listen(); } catch (Exception ex) { Logger.Error(ex); } //System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite); }
/// <summary> /// 开启套接字监听 /// 向主节点发送登记,登记成功,并返回可用的端口,然后开启指定端口的子节点server /// </summary> public static void Start() { try { if (false == GlobalContext.IsConfigClusteringMode)//是否开启集群模式 { return; } //一旦主控节点开启并正确返回结果 if (!MasterRemoteServer.IsMasterStarted()) { return; } //进入监控进程broker AppBroker.MonitorIsMasterCenterAlive(); int port = 0; var slaveIdentity = Guid.NewGuid().ToString().ToLower(); //开启监听前 ,发送注册当前从节点到主节点,如果可以登记注册成功,那么服务端分配端口 port = MasterRemoteServer.RegisterSlaveToMaster(slaveIdentity); int counter = 1; //注册失败后 再次尝试3次 while (port <= 0 && counter <= 3) { port = MasterRemoteServer.RegisterSlaveToMaster(slaveIdentity); counter += 1; RunningLocker.CreateNewLock().CancelAfter(1000);//延迟并发,防止端口资源抢占 } if (port <= 0) { Console.WriteLine("未成功注册从节点端口!"); return;//一旦服务端返回无效端口 那么禁止从节点启动监听 } listener = new NTCPMessage.Server.NTcpListener(new IPEndPoint(IPAddress.Any, port)); listener.DataReceived += new EventHandler <ReceiveEventArgs>(ReceiveEventHandler); listener.ErrorReceived += new EventHandler <ErrorEventArgs>(ErrorEventHandler); listener.RemoteDisconnected += new EventHandler <DisconnectEventArgs>(DisconnectEventHandler); GlobalContext.IsInSlaveMode = true;//标识正在从节点下工作 //开启从节点的监听 listener.Listen(); } catch (Exception ex) { Logger.Error(ex); } System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite); }
/// <summary> /// 开启套接字监听 /// </summary> public static Task Start() { //开启 异步的启动任务,由于在内部进行了线程阻塞,所以task 永远不会complete return(Task.Factory.StartNew(() => { int port = GlobalContext.MasterSocketPort; listener = new NTCPMessage.Server.NTcpListener(new IPEndPoint(IPAddress.Any, port)); listener.DataReceived += new EventHandler <ReceiveEventArgs>(ReceiveEventHandler); listener.ErrorReceived += new EventHandler <ErrorEventArgs>(ErrorEventHandler); listener.RemoteDisconnected += new EventHandler <DisconnectEventArgs>(DisconnectEventHandler); listener.Listen(); System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite); })); }
static void Main(string[] args) { if (System.IO.File.Exists("channel.txt")) { System.IO.File.Delete("channel.txt"); } _Thread = new Thread(Statistic); _Thread.IsBackground = true; listener = new NTCPMessage.Server.NTcpListener(new IPEndPoint(IPAddress.Any, 2500)); listener.DataReceived += new EventHandler <ReceiveEventArgs>(ReceiveEventHandler); listener.ErrorReceived += new EventHandler <ErrorEventArgs>(ErrorEventHandler); listener.RemoteDisconnected += new EventHandler <DisconnectEventArgs>(DisconnectEventHandler); _Thread.Start(); listener.Listen(); System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite); }