Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/wangkechun/vv
vv 编辑器,专注为经常在服务器、虚拟机、docker容器中修改代码或者配置文件的小伙伴提供本地coding新体验。
https://github.com/wangkechun/vv
editor shell ssh vim
Last synced: 7 days ago
JSON representation
vv 编辑器,专注为经常在服务器、虚拟机、docker容器中修改代码或者配置文件的小伙伴提供本地coding新体验。
- Host: GitHub
- URL: https://github.com/wangkechun/vv
- Owner: wangkechun
- License: mit
- Created: 2017-10-21T06:44:22.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2017-10-22T02:30:30.000Z (about 7 years ago)
- Last Synced: 2024-06-20T05:12:16.993Z (5 months ago)
- Topics: editor, shell, ssh, vim
- Language: Go
- Homepage:
- Size: 1.71 MB
- Stars: 14
- Watchers: 4
- Forks: 5
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# vv 编辑器
![vv logo](https://raw.githubusercontent.com/wangkechun/vv/master/doc/icon.png)[![Build Status](https://travis-ci.org/wangkechun/vv.svg?branch=master)](https://travis-ci.org/wangkechun/vv)
[![Go Report Card](https://goreportcard.com/badge/github.com/wangkechun/vv)](https://goreportcard.com/report/github.com/wangkechun/vv)# 视频展示
- ![单文件编辑](https://qs.hi-hi.cn/wangkechun/vv/doc/single.gif)
- [大文件增量传输-点击查看](https://qs.hi-hi.cn/wangkechun/vv/doc/bigfile.gif)
- [fuse编辑远程目录-点击查看](https://qs.hi-hi.cn/wangkechun/vv/doc/dir.gif)## 项目简介:
该项目旨在为经常在服务器、虚拟机、docker容器中修改代码或者配置文件的小伙伴提供本地coding新体验。
你是否一直为修改服务器代码而困扰?无代码高亮,少之又少的快捷方式,一个不注意又写了一个莫名其妙的bug。
我不是资深的vim使用者,我只是一个追求完美和效率的偷懒者。
vv编辑器的想法就是我在偷懒的时候萌生的。
vv+ ‘filename’,你盯着的那个文件已经在你最喜欢的编辑器中打开
'command + s', 服务器已如你期望自动更新完毕
这种开发方式,相信你再也不会拒绝。
## 主要用到的开源库
- google.golang.org/grpc grpc、protobuf
- github.com/kr/binarydist bsdiff 的 go 语言实现
- github.com/spf13/cobra CLI 界面
- github.com/hanwen/go-fuse/fuse go-fuse## 技术实现
### 目录挂载实现
### 增量传输实现
### p2p 数据传输实现
测试过 https://github.com/vzex/dog-tunnel 这种 udp 打洞的方式,不过实测下来稳定性不够,某些网络不能成功连接。
于是改为尝试 frp 这种中间服务器中转的模式。
A -> 中转服务器
B -> 中转服务器
中转服务器 pipe 配对的 tcp, A -> B 成功建立连接。
这里存在一个问题是 A、B 和中转服务器的的时间间隔可能很长,等到成功配对的时候可能有 tcp 已经断掉了,建立的连接是坏的。
并且中转服务器不能私自往 tcp 里面写数据,所以没法提前检测连接是否断掉了。最后改成 A -> 中转服务器 建立长连接, 然后中转服务器如果收到 B 的连接,就告诉 A 需要新起一个连接, 然后把 A 新起的连接和 B 的连接配置。
由于两个连接都是刚刚建立的,不会有超时问题。这种方式的话问题是会慢点,因为要通知 A 去建立一个新连接, 解决方案很简单,A 需要新起连接的时候多发起一个,之后的连接就可以复用了。 如果多余的连接长时间等不到配对会主动断开。
A 和 B 配对成功了就可以随意通信了, 然后直接使用 grpc, 可以很方便的双向通信。
grpc 正常使用是需要一些hack的,正常是一个 server 负责 listen,一个 client 负责 dial。 这里实际上两边都是 dial, 需要自定义一个 listen, 如果成功建立一条到 B 的连接,则 Accept 一个连接给 grpc。