Size: a a a

Kotlin Community

2020 July 28

VP

Vladimir Petrakovich in Kotlin Community
Alexander Nozik
А он без движка-то не поднимется
По ссылке никаких движков нету. CIO работает поверх этих сокетов, а не наоборот.
источник

VP

Vladimir Petrakovich in Kotlin Community
Алексей Ершов
Андроид. Альтернатив особо нет, раньше была попытка вроде в корутинах сделать интеграцию с NIO, но видимо она переехала в ктор. А самому писать пока не хочется)
Ух, вот там надо смотреть, поддерживается ли в нужной версии это всё
источник

AN

Alexander Nozik in Kotlin Community
Vladimir Petrakovich
По ссылке никаких движков нету. CIO работает поверх этих сокетов, а не наоборот.
А, кстати да. Давно не смотрел
источник

АЕ

Алексей Ершов... in Kotlin Community
Vladimir Petrakovich
Ух, вот там надо смотреть, поддерживается ли в нужной версии это всё
в нужной версии чего что?
источник

VP

Vladimir Petrakovich in Kotlin Community
Алексей Ершов
в нужной версии чего что?
В нужной версии Android, на которой хочется это использовать
источник

VP

Vladimir Petrakovich in Kotlin Community
До недавнего времени там был только огрызок NIO
источник

АЕ

Алексей Ершов... in Kotlin Community
ktor-client-android зависит от ktor-client-core, а тот от ktor-network, так что по идее ktor-network должен сам по себе работать. Разумеется, проверю)
источник

VP

Vladimir Petrakovich in Kotlin Community
Алексей Ершов
ktor-client-android зависит от ktor-client-core, а тот от ktor-network, так что по идее ktor-network должен сам по себе работать. Разумеется, проверю)
Это не то чтобы что-то доказывает.
Надо смотреть, в какой версии API добавили ту часть NIO, которая про неблокирующий ввод-вывод.
источник

АЕ

Алексей Ершов... in Kotlin Community
ага, классно, с 26. И как жить?
источник

VP

Vladimir Petrakovich in Kotlin Community
Алексей Ершов
ага, классно, с 26. И как жить?
С minSdk 26 🌚
источник

VP

Vladimir Petrakovich in Kotlin Community
Либо забыть про неблокирующий ввод-вывод и делать свою обёртку поверх SocketChannel
источник

АЕ

Алексей Ершов... in Kotlin Community
Тогда снова возврат к тому же вопросу: как по cancel отменять заблокированный read. Тут видимо 2 варианта:
1) Никак. Тупо сделать отдельный метод close у моей абстракции, и не надеяться что при scope.cancel она остановит всю работу.
2) Изобрести какой-то сложный велосипед даже пока не очень представляю как.
источник

VP

Vladimir Petrakovich in Kotlin Community
Алексей Ершов
Тогда снова возврат к тому же вопросу: как по cancel отменять заблокированный read. Тут видимо 2 варианта:
1) Никак. Тупо сделать отдельный метод close у моей абстракции, и не надеяться что при scope.cancel она остановит всю работу.
2) Изобрести какой-то сложный велосипед даже пока не очень представляю как.
Вариант всего один: закрывать канал, если выполняющаяся на нём операция отменена
источник

VP

Vladimir Petrakovich in Kotlin Community
Ну и выполнять все операции на Dispatchers.IO конечно же
источник

АЕ

Алексей Ершов... in Kotlin Community
я пока не понимаю как его закрыть если в корутине случился блокирующий read
источник

АЕ

Алексей Ершов... in Kotlin Community
flow {
   while (isActive) {
       channel.read()
   }
}
источник

АЕ

Алексей Ершов... in Kotlin Community
условно в таком случае
источник

АЕ

Алексей Ершов... in Kotlin Community
о, шок-контент: кажется, ktor не использует AsynchronousSocketChannel
источник

VP

Vladimir Petrakovich in Kotlin Community
Алексей Ершов
о, шок-контент: кажется, ktor не использует AsynchronousSocketChannel
Ktor делает всё через engine, а там уж всякое бывает, особенно на андроиде
источник

VP

Vladimir Petrakovich in Kotlin Community
Алексей Ершов
flow {
   while (isActive) {
       channel.read()
   }
}
Надо завернуть read() в suspendCancellableCoroutine и перед ним вешать коллбек на отмену, который закроет канал
источник