Повысьте эффективность удаленного офиса научных исследований: инструмент синхронизации кода sync-go

Go

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

адрес:GitHub.com/yourado/sync…

для сцены

В последнее время из-за эпидемии пневмонии все работают удаленно, мои обычные инструменты разработки на самом деле终端+PyCharm.

Терминал подключается к серверу для выполнения команды, а затем загружает код на сервер в режиме реального времени через инструмент синхронизации PyCharm, который, вероятно, выглядит так:

Однако серверы все в интранете.Чтобы подключиться к серверу дома, нужно настроить прокси.Если вы не в лаборатории, если я подключаюсь к服务器1, то придется пройти еще 2-3 ssh. Например, для терминала мне приходится использовать ssh еще дважды.

Однако для терминала я могу открыть tmux на своем облачном сервере, что ничем не отличается от работы в лаборатории.

Но для редактирования кода, потому что я еще не привык использовать vim, если я использую PyCharm, то мне приходится делать scp дважды, что явно не то, что я хочу.

Зачем строить колеса

Просматривая github, я нашел такой инструмент:GitHub.com/ Иногда светит луна…Кажется, он удовлетворяет мои потребности, и его эффект заключается в следующем:

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

Поскольку для передачи файла размером 1M в сеть может потребоваться несколько секунд, событие записи файла всегда будет инициироваться в течение этих нескольких секунд. Таким образом, он может продолжать загрузку.

Кроме того, для передачи сетевых файлов сначала создайте пустой файл, а затем запишите в пустой файл.Интервал времени между ними очень короткий.

// create destination file
dstFile, err := sftpClient.Create(remotepath)
if err != nil {
	log.Fatal(err)
}
defer dstFile.Close()

// create source file
srcFile, err := os.Open(localpath)
if err != nil {
	log.Fatal(err)
}

// copy source file to destination file
_, err = io.Copy(dstFile, srcFile)
if err != nil {
	log.Fatal(err)
}

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

Итак, по сравнению с инструментом синхронизации с локального сервера на удаленный, в инструменте синхронизации между удаленными серверами я добавил следующие два момента:

    1. Добавьте некоторую задержку, чтобы предотвратить повторную запись файла.
    1. Для каждой модификации файла, если размер файла превышает определенный уровень (например, 20 КБ), необходимо постоянно оценивать, записывается ли файл, и необходимо дождаться записи файла, а затем загрузить .

инструкции

Загрузить и установить

Здесь, поскольку я использую язык go, я могу напрямую загрузить скомпилированные результаты. Затем добавьте его в путь.

wget https://github.com/nladuo/sync-go/releases/download/1.0/sync-go
chmod +x sync-go
mv sync-go /usr/local/bin/

Здесь представлены только результаты компиляции 64-битного linux, потому что он определенно используется между linux, а 32-битных серверов сейчас должно быть немного.

Инициализировать файл конфигурации

включить синхронизацию