#unity3d #websocket-sharp
#unity3d #websocket-sharp
Вопрос:
Мне очень сложно найти простую надежную библиотеку для использования в Unity для простого клиента websocket. WebSocketSharp (т.Е.https://github.com/sta/websocket-sharp ) кажется прекрасным, но многие элементы необъяснимы.
Когда поступают входящие сообщения,
wssharp_connection.OnMessage = (sender, e) =>
{
if (!e.IsText) { return; }
Debug.Log(">> OnMessage, " e.Data);
Handle(e.Data);
// but wait, not the main Unity thread??
};
void Handle(string msg)
{
.. your conventional Unity call, in a monobehavior
}
Тестирование показывает, что он, похоже, поступает (всегда? иногда?) не основной поток Unity.
Кто-нибудь знает
-
На самом деле это всегда не основной поток, или он может меняться?
-
Если всегда другой поток, на самом деле это всегда один и тот же поток, или он варьируется / много?
Поскольку каждое отдельное приложение Unity, использующее клиент websocket, должно это делать, я удивлен, что нет 100 обсуждений о том, как обрабатывать входящие сообщения, в том числе на странице WebSocketSharp,
но вот что я бы сделал, просто обычным способом, которым вы обрабатываете «потоки» в движке на основе фреймов, таком как Unity:
wssharp_connection.OnMessage = (sender, e) =>
{
if (!e.IsText) { return; }
incoming_messages.Enqueue(e.Data);
};
// and ...
ConcurrentQueue<string> incoming_messages = new ConcurrentQueue<string>();
void Update()
{
if (incoming_messages.TryDequeue(out var message))
{
Handle(message);
}
}
Итак, тогда
- Действительно ли это обычный способ решения проблемы с потоками в WebSocketSharp при использовании внутри Unity?
Учитывая, сколько миллиардов приложений Unity существует с клиентами websockets, это должно быть довольно проторенный путь.
Комментарии:
1. привет @Fattie, не могу ответить на ваши вопросы так, как хочу, потому что я никогда не использую WebSocketSharp, но, возможно, это репозиторий, который я сделал давным-давно, мог бы помочь с простой обработкой сокета TCP: github.com/EricBatlle/SimpleUnityTCP . Мои соображения по поводу ваших вопросов таковы: 1. Ваши сообщения могут быть получены только в вашем основном потоке, поскольку в Unity больше нет потоков. 2. Каждый раз, когда мне нужно обрабатывать сокеты, я обнаруживаю, что создаю внешнее программное обеспечение для этого ^^’
2. Я искал, как обрабатывать сообщения с помощью этой библиотеки. Ваш вопрос решает мою проблему! ConcurrentQueue отлично работает для меня. Спасибо
3. @Willyan Надеюсь, это поможет. Действительно, я рекомендую github.com/Marfusios/websocket-client в наши дни. Желаю удачи.
4. Этот вопрос очень старый и вводящий в заблуждение. Он был отредактирован, и, поскольку есть ответ, я не могу его удалить. Упомянутая библиотека больше не работает. Фактически (2021) единственной рабочей библиотекой является github.com/Marfusios/websocket-client .. когда появится еще один, кто-нибудь, пожалуйста, упомяните об этом!
5. @Fattie Несмотря на то, что он платный, BestHTTP в хранилище ресурсов Unity является лучшей сетевой библиотекой, и я годами использую его в своих проектах без проблем. Я увидел этот вопрос, потому что я хотел бы предложить альтернативы с открытым исходным кодом для людей, которые предпочли бы использовать это вместо этого.