/// <summary> /// 创建客户端。 /// </summary> /// <param name="endPoint">终结点。</param> /// <returns>传输客户端实例。</returns> public ITransportClient CreateClient(EndPoint endPoint) { var key = endPoint; if (_logger.IsEnabled(LogLevel.Debug)) { _logger.LogDebug($"准备为服务端地址:{key}创建客户端。"); } try { return(_clients.GetOrAdd(key , k => new Lazy <ITransportClient>(() => { //var bootstrap = _bootstrap; IChannel channel = new HeartBeatsClient().Connect(key, 3); var messageListener = new MessageListener(); channel.GetAttribute(messageListenerKey).Set(messageListener); var messageSender = new DotNettyMessageClientSender(_transportMessageEncoder, channel); channel.GetAttribute(messageSenderKey).Set(messageSender); channel.GetAttribute(origEndPointKey).Set(k); var client = new TransportClient(messageSender, messageListener, _logger, _serviceExecutor); return client; } )).Value); } catch { _clients.TryRemove(key, out var value); throw; } }
static void Main(string[] args) { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); int port = 8808; var channel = new HeartBeatsClient().Connect("127.0.0.1", port, 3); Console.ReadLine(); channel.CloseAsync().Wait(); }