Перейти к публикации
  • Сейчас на странице   Всего пользователей: 3   (0 пользователей, 3 гостя)

Rooster

Программирование[11]

var  

258 пользователей проголосовало

У вас нет прав на голосование в этом опросе, или на просмотр результатов опроса. Пожалуйста, войдите или зарегистрируйтесь для голосования в опросе.

Рекомендованные сообщения

Just.Doit написал 22 минуты назад:

ну ты по TCP посылаешь набор данных приложения. верно?

в чем проблема назвать их сообщением?

Океййййй, договорились, TCP сообщение это некий абстрактный набор байтиков который ты в своем приложении отправляешьк как write(message)

Just.Doit написал 23 минуты назад:

дак вот. ты можешь послать 2 TCP сообщения разных.

и если в приложении они произошли друг между другом последовательно и имели happens-before между собой, но отправил ты их сразу как они произошли и сделал это в асинхронной конкурентной манере (без синхронизации между собой), то они могут из-за сети прийти в обратном порядке. я про это

 

Just.Doit написал 10 минут назад:

если говорить про msg/event аппы, который ты в своей джаве отсылаешь c помощью библиотеки предоставляющей сетевое взаимодействие - конечно да.

и если ты это делаешь в параллель, не имея синхронизации между собой, то на том конце ты можешь их получить в обратном/не верном порядке

:chel:

Даже не так, скорее вот так

:chel::chel::chel::chel::chel::chel::chel::chel::chel::chel::chel::chel::chel::chel::chel:

 

@Kant нужна помощь, передаю эстафету про TCP снова тебе, потому что я такой подставы от дуита не ожидал


ward написал 04.01.2022 в 02:54:

Hades для стада долбоебичей которые прокликивали Дэш и думали ебать они в артхаузнвй рогалик играют, не такие как все.

mazt3r написал 20.09.2019 в 11:27:

ласт оф ас - хуета для лисят и прочих мальчиков с вагиной между ног.

 

Поделиться сообщением


Ссылка на сообщение
GoldRobot написал 38 минут назад:

нужна помощь, передаю эстафету про TCP снова тебе, потому что я такой подставы от дуита не ожидал

ты походу что-от очень сильно не понимаешь


 

очень крутые котейки

RqvSzvr.png


Кому-то пизды дал - нужно сделать скрин обязательно. (с) Solo

Поделиться сообщением


Ссылка на сообщение

я хуй знает зачем вы вообще на лвл ниже куда-то опускаетесь

у вас есть массив байт от приложения

задача тсп его доставить на другой конец

тсп это делает с гарантией что байты придут и придут в нужном порядке, но без гарантии, что байты придут одним куском, тк они сука могут не влезть в 1 транспортный пакет

 

конец


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение
(изменено)
Just.Doit написал 1 час назад:

ты походу что-от очень сильно не понимаешь

Я незнаю как тебе писать или объяснять. Просто прими что дает тебе гарантию того, что ты, как пользователь расположенный на 5(6) уровне, никогда не получишь данные в порядке, отличимом от того в каком их отправили. Ни единого блять байтика! Неважно как ты отправляешь, как часто, как много, синхронизированно ли ты пишешь в сокет который дала тебе система (бтв в сокет нельзя писать без синхронизации, только один должен писать одновременно) или на похуй записываешь данные. Как записали при отправке, так и получите при приеме.

И ситуации когда:

Just.Doit написал 2 часа назад:

msg/event аппы, который ты в своей джаве отсылаешь c помощью библиотеки предоставляющей сетевое взаимодействие ..... на том конце ты можешь их получить в обратном/не верном порядке

быть не может в принципе, это гаранитируется на уровне протокола. Если тебя интересует как это конкретно сделано, то очень просто. Ты когда отсылаешь (представим что ты TCP протокол), ты в каждом сегменте записываешь номер байта в потоке от начала жизни соединения (в поле sequence чето там). Тоесть отослал N байт в сегменте Y, то в сегменте Y+1 у тебя будет записано что он содержит N+1 байт и выше. Это поле, в совокупе с размером пакета, позволяет на уровне TCP протокола расположить данные в правильном порядке, перед тем как отдать приложению. И это число инкрементится от начала жизни соединения, до конца, неважно сколько сегментов (в один момент его ресетить нужно, но не суть).

И такой штуки как "TCP Сообщение", в том понимании которое ты вкладываешь, не существует вообще. Есть TCP Сегменты. Потому что это именно сегменты одного, неделимого, потока данных. 

 

Сори что сразу не объяснил, но я правда подахуел с того такой старожил как ты этого не знаешь.


Изменено пользователем GoldRobot

ward написал 04.01.2022 в 02:54:

Hades для стада долбоебичей которые прокликивали Дэш и думали ебать они в артхаузнвй рогалик играют, не такие как все.

mazt3r написал 20.09.2019 в 11:27:

ласт оф ас - хуета для лисят и прочих мальчиков с вагиной между ног.

 

Поделиться сообщением


Ссылка на сообщение
Rilay написал 31.01.2022 в 09:40:

всем привет, в общем сделал вот так!!

image.png.b9a835f30dc4053b617f863d362a2304.png

 

 

если псевдокодом, то вкратце

я два раза делаю:

    читаю заголовок пакета

    читаю оттуда длину сообщения

    сообщение добавляю к сообщению

 

потом сообщение уже которое состоит из сообщения из двух пакетов, кидаю на парсинг :hmm:

типа читаю длину

читаю строку

image.png.c39311bbebfba3f072dcfe0e9cbef2e6.png

 

потом еще раз делаю так, и получается строка из двух строк (двух пакетов)

image.png.de39781c5cedf83201580e9171605db5.png

 

и ее уже на парсинг (режу)

 

 

Тебе не нужен отдельный буфер для чтения заголовка, ты можешь сразу читать в него. Это также позволит тебе избавиться от binary.BigEndian.Uint32() потому что ты можешь сразу читать BigEndian в структуру. Как-то так:

type AVL12Header struct {
  preamble uint32;
  data_size uint32 ;
  codec_id byte;
  cmd_count byte ;
  type byte;
  command_size uint32;
}
type AVL12Footer struct {
  cmd_count byte;
  crc16 uint32;
}

type AVL12Command struct {
  header AVL12Header;
  command string;
  footer AVL12Footer;
}

func read_command(conn) (AVL12Command, error) {
  var cmd AVL12Command;
  err := binary.Read(conn, binary.BigEndian, &cmd.header);
  if err != nil {
    return nil, err;
  }
  buffer := make([]byte, cmd.header.command_size);
  err = conn.Read(buffer);
  if err != nil {
    return nil, err;
  }
  cmd.command = string(buffer);
  err = conn.Read(conn, binary.BigEndinan, &cmd.footer);
  if err != nil {
    return nil, err;
  }
  return cmd, nil;
}

Вот у тебя будет функция которая просто читает один пакет и ничего не "парсит" кроме длины команды. Парси во второй функции, будет как раз как хотели.
Не знаю зачем ты читаешь по два пакета, но смотря что ты делаешь с данными потом, может это и норм.
 

Rilay написал 29.01.2022 в 12:22:

По моему я не апаюсь в скиле нихуя какой то чепухой занимаюсь

Если ты хочешь развиваться, то не надо останавливаться на первом решении которое сработало, или, еще хуже, доказывать что оно хорошее когда тебе говорят иначе (много людей, или кто-то кому ты уже доверяешь). Вместо этого попробуй другие варианты, и потом уже оценишь что лучше и будешь знать на будущее несколько опций. Если делать нечего то посмотри на текущий код, и попробуй переписать его по другому, даже если не кажется что будет лучше.

Это как если бы ты в доте играл на новом герое, и решил что итем билд с которым ты выиграл в первый раз теперь надо всегда юзать, и больше ничего пробовать не надо. Тебе может повезти и с тобой попдается Серега Пират (@GoldRobot) и подскажет крутой билд, но ты то от этого лучше не станешь.

Поделиться сообщением


Ссылка на сообщение
DeadMage написал 8 минут назад:

Не знаю зачем ты читаешь по два пакета,

потому что в одном пакете данные по координатам,  а во втором данные по датчикам, он вот их кидает по два, а не все в одном


Лучший юзер — Rilay

 

Поделиться сообщением


Ссылка на сообщение
madvlaydin написал 3 часа назад:

конечно нет, потому что эти занимается твоя сетевая карточка, заворачивая tcp ПАКЕТ в Ethernet кадры и потом каким-нибудь манчестерским кодом отдаёт в провод блять

Не знал, что сетевые карточки что-то знают про TCP. Хочешь сказать, что они и про ПОРТы что-то знают? :monkagiga:

GoldRobot написал 3 часа назад:

:chel:

Даже не так, скорее вот так

:chel::chel::chel::chel::chel::chel::chel::chel::chel::chel::chel::chel::chel::chel::chel:

 

@Kant нужна помощь, передаю эстафету про TCP снова тебе, потому что я такой подставы от дуита не ожидал

Там кажется Java головного мозга

@GoldRobotЕсли ты столько знаешь, то чего ты работаешь за 90 тыс рублей? Признайся уже, что это доллары. Ну или хотя бы гривны...

GoldRobot и Soulless1989 понравилось это

Поделиться сообщением


Ссылка на сообщение
DeadMage написал 1 час назад:

Вот у тебя будет функция которая просто читает один пакет и ничего не "парсит" кроме длины команды. Парси во второй функции, будет как раз как хотели.
Не знаю зачем ты читаешь по два пакета, но смотря что ты делаешь с данными потом, может это и норм.

вот так в итоге сделал


    var stringToSend string
    var cmd AVL12Command
    var err error
    for n := 0; n < 2; n++ {
        err := binary.Read(conn, binary.BigEndian, &cmd.Header)
        if err != nil {
            return stringToSend, err
        }
        buffer := make([]byte, cmd.Header.Command_size)
        _, err = conn.Read(buffer)
        if err != nil {
            return stringToSend, err
        }
        cmd.Command = string(buffer)
        err = binary.Read(conn, binary.BigEndian, &cmd.Footer)
        if err != nil {
            return stringToSend, err
        }
        stringToSend += cmd.Command
        fmt.Println(stringToSend)
    }

return stringToSend, err


Лучший юзер — Rilay

 

Поделиться сообщением


Ссылка на сообщение

так то в гривнах это уже 3к долларов... было бы норм

Поделиться сообщением


Ссылка на сообщение
Rilay написал 1 час назад:
DeadMage написал 1 час назад:

Не знаю зачем ты читаешь по два пакета,

потому что в одном пакете данные по координатам,  а во втором данные по датчикам, он вот их кидает по два, а не все в одном

Ну ты их можешь и парсить по отдельности. В твоем случае, наверное, и правда проще просто читать два пакета подряд, но теоретически может так получится что тебе придет что-то другое (например два пакета по координатам подряд). Смотря что ты дальше делаешь с этими данными можно по разному сделать.

Если тебе нужно обязательно пачкой выдавать данные координаты+датчики, то можно парсить пакеты пока ты не получишь обе части данных, обработать их, и снова ждать.

var have_coords bool = false;
var have_sensors bool = false;
while(!have_coords || !have_sensors) {
  var cmd, _ = readCmd(conn);
  if parse_coords(cmd) {
    // сохранить координаты
    have_coords = true;
  } else if parse_sensors(cmd) {
    // сохранить данные сенсора
    have_sensors = true;
  }
}
Grohuf написал 1 час назад:

Не знал, что сетевые карточки что-то знают про TCP. Хочешь сказать, что они и про ПОРТы что-то знают? :monkagiga:

Плохо что не знал, у тебя ж там хайлоад в яндуксе? https://en.wikipedia.org/wiki/TCP_offload_engine

Поделиться сообщением


Ссылка на сообщение
DeadMage написал 5 минут назад:
Rilay написал 1 час назад:
DeadMage написал 1 час назад:

Не знаю зачем ты читаешь по два пакета,

потому что в одном пакете данные по координатам,  а во втором данные по датчикам, он вот их кидает по два, а не все в одном

Ну ты их можешь и парсить по отдельности. В твоем случае, наверное, и правда проще просто читать два пакета подряд, но теоретически может так получится что тебе придет что-то другое (например два пакета по координатам подряд). Смотря что ты дальше делаешь с этими данными можно по разному сделать.

Если тебе нужно обязательно пачкой выдавать данные координаты+датчики, то можно парсить пакеты пока ты не получишь обе части данных, обработать их, и снова ждать.


var have_coords bool = false;
var have_sensors bool = false;
while(!have_coords || !have_sensors) {
  var cmd, _ = readCmd(conn);
  if parse_coords(cmd) {
    // сохранить координаты
    have_coords = true;
  } else if parse_sensors(cmd) {
    // сохранить данные сенсора
    have_sensors = true;
  }
}
Grohuf написал 1 час назад:

Не знал, что сетевые карточки что-то знают про TCP. Хочешь сказать, что они и про ПОРТы что-то знают? :monkagiga:

Плохо что не знал, у тебя ж там хайлоад в яндуксе? https://en.wikipedia.org/wiki/TCP_offload_engine

 

Ну Линукс все равно много делает в TCP. Например размер баффера для получения TCP ты все равно через Линукс указываешь.


towBCf6.pngimage.png.6f88ac9ad688355eb803ba0b32e309ca.pngimage.png.c05354238865437022b3e4a97a835dbd.pngimage.png.0e8329f2b07e208ae8ef4e3f6878d126.png

 

 

 

Поделиться сообщением


Ссылка на сообщение

У нас изначально задумывалось что билайн предоставит железку, балансер, который на железном уровне прозрачно для участников раскидывать будет TCP соединения на разные инстансы. Без понятия как это выглядить должно было в деталях. Но в итоге все это вылилось в HA proxy, и поэтому пришлось еще и поддержку его протокола добавлять нам (что бы видеть с какого реального ип к нам конектятся) :zatrolka_tupostu:

Так что они не просто порты могут знать.

 


ward написал 04.01.2022 в 02:54:

Hades для стада долбоебичей которые прокликивали Дэш и думали ебать они в артхаузнвй рогалик играют, не такие как все.

mazt3r написал 20.09.2019 в 11:27:

ласт оф ас - хуета для лисят и прочих мальчиков с вагиной между ног.

 

Поделиться сообщением


Ссылка на сообщение

Я не знал что европейцы такие жмоты, запустил процесс увольнения в своей компании, сначала базарю с менеджером и он говорит "ты же знаешь что тебя нашел экстернал рекуртер и мы ему куча бабла за тебя заплатили, а он обещал что ты год проработаешь, надо с ним мне связаться", я такой "ну знаю" лол блять, че он хотел услышать, давай я заплачу за вас? :onneponimaet:
Ну рекуртер спрашивал кстати об этом, я тому экстернал рекуртеру рил говорил что минимум на год, хотя по факту через полгода свалил, но я изначально думал реально год минимум))) 

потом письмо приходит от HR, в котором все как обычно, кроме фразы "грустно что ты уходишь, учитывая сколько мы вложили в твой онбординг, привезли в Нидерланды на знакомоство с командой", ебаааать думаю потратились нахуй 400$ билеты и где-то 600$ комната :onneponimaet:

Я хуй знает, зачем эти разговоры вообще, по контракту 30 дней отработать надо, я отработаю за зп офк, все остальное поебать как-то

Поделиться сообщением


Ссылка на сообщение
GoldRobot написал 1 минуту назад:

У нас изначально задумывалось что билайн предоставит железку, балансер, который на железном уровне прозрачно для участников раскидывать будет TCP соединения на разные инстансы. Без понятия как это выглядить должно было в деталях. Но в итоге все это вылилось в HA proxy, и поэтому пришлось еще и поддержку его протокола добавлять нам (что бы видеть с какого реального ип к нам конектятся) :zatrolka_tupostu:

Так что они не просто порты могут знать.

 

 

Эээ круто

 

Только эти разные инстансы все еще сами должны TCP поддерживать Ты вкурсе как роутер работает?


towBCf6.pngimage.png.6f88ac9ad688355eb803ba0b32e309ca.pngimage.png.c05354238865437022b3e4a97a835dbd.pngimage.png.0e8329f2b07e208ae8ef4e3f6878d126.png

 

 

 

Поделиться сообщением


Ссылка на сообщение
(изменено)
Vova написал 3 минуты назад:

Только эти разные инстансы все еще сами должны TCP поддерживать

Это очевидно. Непонятно откуда ты взял что они не должны были бы их поддерживать.

Написано это было к тому, что железки достаточно умные бывают. Как я предполагаю получается два соединения, два плечи. И она между ними как прокся работает, подменяя ип/порт в пакетиках.

Под разными инстансами имеются полностью разные сервера, в разных городах.


Изменено пользователем GoldRobot

ward написал 04.01.2022 в 02:54:

Hades для стада долбоебичей которые прокликивали Дэш и думали ебать они в артхаузнвй рогалик играют, не такие как все.

mazt3r написал 20.09.2019 в 11:27:

ласт оф ас - хуета для лисят и прочих мальчиков с вагиной между ног.

 

Поделиться сообщением


Ссылка на сообщение
GoldRobot написал 2 минуты назад:
Vova написал 5 минут назад:

Только эти разные инстансы все еще сами должны TCP поддерживать

Это очевидно. Непонятно откуда ты взял что они не должны были бы их поддерживать.

Написано это было к тому, что железки достаточно умные бывают. Как я предполагаю получается два соединения, два плечи. И она между ними как прокся работает, подменяя ип/порт в пакетиках.

Под разными инстансами имеются полностью разные сервера, в разных городах.

 

 

Нe речь была про сетевые карточки К чему ты со своим балансером Есть железяки которые даже CPU имеют прикинь


towBCf6.pngimage.png.6f88ac9ad688355eb803ba0b32e309ca.pngimage.png.c05354238865437022b3e4a97a835dbd.pngimage.png.0e8329f2b07e208ae8ef4e3f6878d126.png

 

 

 

Поделиться сообщением


Ссылка на сообщение

Ладно уел


ward написал 04.01.2022 в 02:54:

Hades для стада долбоебичей которые прокликивали Дэш и думали ебать они в артхаузнвй рогалик играют, не такие как все.

mazt3r написал 20.09.2019 в 11:27:

ласт оф ас - хуета для лисят и прочих мальчиков с вагиной между ног.

 

Поделиться сообщением


Ссылка на сообщение
Drakonian написал 9 минут назад:

Я не знал что европейцы такие жмоты, запустил процесс увольнения в своей компании, сначала базарю с менеджером и он говорит "ты же знаешь что тебя нашел экстернал рекуртер и мы ему куча бабла за тебя заплатили, а он обещал что ты год проработаешь, надо с ним мне связаться", я такой "ну знаю" лол блять, че он хотел услышать, давай я заплачу за вас? :onneponimaet:
Ну рекуртер спрашивал кстати об этом, я тому экстернал рекуртеру рил говорил что минимум на год, хотя по факту через полгода свалил, но я изначально думал реально год минимум))) 

потом письмо приходит от HR, в котором все как обычно, кроме фразы "грустно что ты уходишь, учитывая сколько мы вложили в твой онбординг, привезли в Нидерланды на знакомоство с командой", ебаааать думаю потратились нахуй 400$ билеты и где-то 600$ комната :onneponimaet:

Я хуй знает, зачем эти разговоры вообще, по контракту 30 дней отработать надо, я отработаю за зп офк, все остальное поебать как-то

 

Ну они то не вкурсе что в Украине зарплаты выше чем в Нидерладнах)))))) Они думаю Украина это типо Зимбабве и ты там умирал с голоду

Drakonian понравилось это

towBCf6.pngimage.png.6f88ac9ad688355eb803ba0b32e309ca.pngimage.png.c05354238865437022b3e4a97a835dbd.pngimage.png.0e8329f2b07e208ae8ef4e3f6878d126.png

 

 

 

Поделиться сообщением


Ссылка на сообщение
Vova написал 3 минуты назад:

Они думаю Украина это типо Зимбабве

Замечу что в Зимбабве можно тоже найти места сытные...

Я даже пост (дожили, на хабре не статьи, а посты) с хабра читал в эмиг топик где челик рассказывал что забеись живется в подобном месте


ward написал 04.01.2022 в 02:54:

Hades для стада долбоебичей которые прокликивали Дэш и думали ебать они в артхаузнвй рогалик играют, не такие как все.

mazt3r написал 20.09.2019 в 11:27:

ласт оф ас - хуета для лисят и прочих мальчиков с вагиной между ног.

 

Поделиться сообщением


Ссылка на сообщение

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

×
×
  • Создать...