C# 我正在使用wampsharpclient连接到websocket。如果断开连接,我无法重新连接到插座
我正在使用wampsharpclient连接到websocket。如果断开连接,我无法重新连接到套接字。下面是我为连接逻辑编写的代码,如果连接断开或出现错误,则重新连接C# 我正在使用wampsharpclient连接到websocket。如果断开连接,我无法重新连接到插座,c#,sockets,websocket,wampsharp,C#,Sockets,Websocket,Wampsharp,我正在使用wampsharpclient连接到websocket。如果断开连接,我无法重新连接到套接字。下面是我为连接逻辑编写的代码,如果连接断开或出现错误,则重新连接 public static async Task WampConnect(String uri, String kafkaTopic, String subscribeTopic) { log.Info("Entering to WampConnect method: "
public static async Task WampConnect(String uri, String kafkaTopic, String subscribeTopic)
{
log.Info("Entering to WampConnect method: " + Thread.CurrentThread.ManagedThreadId + " - " + kafkaTopic);
await Task.Run(async () =>
{
DefaultWampChannelFactory factory = new DefaultWampChannelFactory();
IWampChannel channel = factory.CreateJsonChannel(uri, "realm1");
IWampRealmProxy realmProxy = channel.RealmProxy;
await channel.Open();
var retry = true;
channel.RealmProxy.Monitor.ConnectionError += async(sender, args) =>
{
log.Info("Error Reason: " + args.Exception + " - Reconnecting");
retry = true;
while (retry)
{
factory = new DefaultWampChannelFactory();
channel = factory.CreateJsonChannel(uri, "realm1");
realmProxy = channel.RealmProxy;
await channel.Open();
//await Task.Delay(2000);
}
};
channel.RealmProxy.Monitor.ConnectionEstablished +=
(sender, args) =>
{
retry = false;
log.Info("connected session with ID " + args.SessionId);
IWampSubject topic = realmProxy.Services.GetSubject(subscribeTopic);
IDisposable disposable = topic.Subscribe(
async serializedEvent =>
{
Object arguments = null;
if (subscribeTopic.Equals("ticker"))
{
String[] tickerData = serializedEvent.Arguments.Select(argument => argument.Deserialize<String>()).ToArray();
arguments = string.Join(",", tickerData);
}
else
{
arguments = serializedEvent.Arguments.Select(argument => argument.Deserialize<JObject>()).ToArray<JObject>();
}
await SendToKafka(arguments, kafkaTopic);
}
);
};
channel.RealmProxy.Monitor.ConnectionBroken += (sender, args) =>
{
log.Info("Disconnected Reason: " + args.Reason + " - Reconnecting");
retry = true;
/*while(retry)
{
factory = new DefaultWampChannelFactory();
channel = factory.CreateJsonChannel(uri, "realm1");
realmProxy = channel.RealmProxy;
await channel.Open();
await Task.Delay(2000);
}*/
};
});
// log.Info("Exiting WampConnect method: " + Thread.CurrentThread.ManagedThreadId + " - " + kafkaTopic);
}
公共静态异步任务WampConnect(字符串uri、字符串kafkaTopic、字符串subscribeTopic)
{
log.Info(“进入WampConnect方法:“+Thread.CurrentThread.ManagedThreadId+”-“+kafkaTopic”);
等待任务。运行(异步()=>
{
DefaultWampChannelFactory=新的DefaultWampChannelFactory();
IWampChannel=factory.CreateJsonChannel(uri,“realm1”);
IWampRealmProxy realmProxy=通道.realmProxy;
等待频道打开();
var retry=true;
channel.RealmProxy.Monitor.ConnectionError+=异步(发送方,参数)=>
{
log.Info(“错误原因:+args.Exception+”-重新连接”);
重试=真;
while(重试)
{
工厂=新的默认WAMPChannelFactory();
channel=factory.CreateJsonChannel(uri,“realm1”);
realmProxy=channel.realmProxy;
等待频道打开();
//等待任务。延迟(2000);
}
};
channel.RealmProxy.Monitor.Connection已建立+=
(发送方,args)=>
{
重试=错误;
log.Info(“ID为“+args.SessionId的已连接会话”);
IWampSubject topic=realmProxy.Services.GetSubject(subscribeTopic);
IDisposable=topic.Subscribe(
异步序列化devent=>
{
对象参数=null;
if(subscribeTopic.Equals(“ticker”))
{
String[]tickerData=serializedEvent.Arguments.Select(参数=>argument.Deserialize()).ToArray();
参数=string.Join(“,”,tickerData);
}
其他的
{
arguments=serializedEvent.arguments.Select(参数=>argument.Deserialize()).ToArray();
}
等待SendToKafka(争论,卡夫卡托克);
}
);
};
channel.RealmProxy.Monitor.ConnectionBreaked+=(发送方,参数)=>
{
log.Info(“断开连接的原因:+args.Reason+”-重新连接”);
重试=真;
/*while(重试)
{
工厂=新的默认WAMPChannelFactory();
channel=factory.CreateJsonChannel(uri,“realm1”);
realmProxy=channel.realmProxy;
等待频道打开();
等待任务。延迟(2000);
}*/
};
});
//log.Info(“正在退出WampConnect方法:“+Thread.CurrentThread.ManagedThreadId+”-“+kafkaTopic”);
}
请阅读WampSharp wiki中的WampChannelReconnector机制,并尝试使用它。您解决了吗?