У меня проблема с веб-сокетом из веб-библиотеки (https://github.com/sta/websocket-sharp).) У меня есть схема, в которой у меня есть клиент веб-сокета (MyClient) и веб-сервер (MyServer). MyClient подключается к внешнему серверу веб-сокета, получает сообщение время от времени от него и через MyServer транслируют это сообщение всем подключенным к MyServer клиентам (GuestClients). Довольно часто я получаю такую форму исключения на стороне MyServer:
2019-03-26 06: 09: 47.4749 | ОШИБКА | BusinessLogic | Соединение было закрыто код: 1006 причина Причина Часть заголовка кадра не может быть прочитана из источника данных.
2019-03-26 06: 09: 47.4749 | ОШИБКА | BusinessLogic | Код 1006
Я пытался отключить проблемных клиентов, но через некоторое время (стабильная работа около 15 минут) вещание полностью прекращается. Общее количество подключенных GuestClients составляет менее 100. GuestClients - реализованы в виде веб-страниц с кодом JavaScript или скриптами Python сторонней программы.
// WebSocketServer
WebSocketServer BCServer;
BCServer = new WebSocketServer(PORT);
BCServer.AddWebSocketService<SiteName>("/SiteName", () => new SiteName()
{
IgnoreExtensions = true
} );
BCServer.Start();
// WebSocket Client
WebSocket WSClient;
WSClient = new WebSocket(URI);
WSClient.OnMessage += (sender, e) =>
{
// process the data
sendDataBroadCast(jsonData);
};
WSClient.Connect();
public static void sendDataBroadCast(string jsonData)
{
try
{
lock (BCServer)
{
if (BCServer.IsListening)
{
BCServer.WebSocketServices.BroadcastAsync(jsonData, OnFinish);
}
}
}
catch(Exception ex)
{
}
}
// and class SiteName
public class SiteName : WebSocketBehavior
{
protected override void OnOpen()
{
logger.Info("Total number of Session is " + Sessions.Count);
}
protected override void OnError(WebSocketSharp.ErrorEventArgs e)
{
Sessions.CloseSession(ID);
}
protected override void OnMessage(MessageEventArgs e)
{
try
{
// just do some job
}
catch (Exception ex)
{
}
}