一种轻量级在线代码协同编辑的方法与流程

文档序号:32005342发布日期:2022-11-02 12:55阅读:216来源:国知局
一种轻量级在线代码协同编辑的方法与流程

1.本发明涉及语言服务协议领域,具体为一种轻量级在线代码协同编辑的方法。


背景技术:

2.语言服务协议,定义了在编辑器或ide与语言服务器之间使用的协议,该语言服务器提供了包括自动补、转到定义、查找所有引用等在内的多种功能。一般地,为了能够支持丰富的编辑功能,通常需要在编辑器或ide的编程语言中编写域模型,这就需要个ide根据自己的api实现上述工作,即使是相同的功能,也要根据不同ide实现一遍重复的功能,例如在eclipse ide中提供的对c/c++支持的eclipse cdt插件就是以java编写的。如果开发工具可以重用现有的特定于语言的库,则创建特定于语言的域模型也容易得多。但是,这些库通常在编程语言本身中实现,如果将语言a的库集成到用语言b编写的编辑器中,在技术上是可行的,但难度很大,语言服务器的出现,旨在提供某个语言的智能化,并通过支持进程间通信的协议与开发工具进行通信。
3.lsp设计的目标是使该语言服务器和开发工具进行标准化的通信,这个语言服务可以在多个开发工具中重复使用,从而以最小的改动支持多种语言。语言服务器后端可以用php、python或者java编写,lsp可以轻松地将其集成到各种工具中,该协议提供通用抽象级别的协议,以便工具可以提供丰富的语言服务,从而无需完全理解特定于底层域模型的细微差别。
4.在低代码开发平台的使用中,如果无法为开发人员提供高效便捷的开发工具,如代码提示、自动补全等,或无法保证在线开发的稳定性,这些都会大大增加开发工作量,降低开发效率,为了解决以上问题,实现开发人员在线代码协同编辑,提高开发人员的效率,我们实现了一套基于lsp协议,结合websocket即时通讯,并采用java语言进行开发的语言服务器工具,为此提供了一种轻量级在线代码协同编辑的方法。


技术实现要素:

5.本发明的目的是针对现有技术的缺陷,提供一种轻量级在线代码协同编辑的方法,以解决上述背景技术提出的问题。
6.为实现上述目的,本发明提供如下技术方案:一种轻量级在线代码协同编辑的方法,具体步骤如下:步骤1:客户端发送initialize请求,包含一些初始化参数,服务器端收到请求后开始准备启动语言服务,之后服务器端会发送initialized通知到客户端,语言服务开始工作;步骤2:初始化成功后服务器端可能会向客户端发送一些动态注册功能的请求client/registercapability;步骤3:每次打开一个文件,客户端需要向server发送一个textdocument/didopen请求,携带文件uri参数;同理关闭文件后要发送一个textdocument/didclose请求;
步骤4:编辑文档时,当输入或按下语法提示快捷键时,客户端发送textdocument/completion请求来获取智能提示列表;步骤5:当用户查询某个类/变量/方法的声明时(点击跳转),客户端发送textdocument/definition,服务器端将返回对应的文件uri及位置信息,客户端需要实现打开这个新文件的方法;步骤6:当用户关闭编辑器时,客户端先发送shutdown请求,服务器端收到请求后会立即关闭但并不会退出进程,而是等待客户端发送exit通知。
7.作为本发明的一种优选技术方案,所述步骤1-步骤6中不同客户端与服务器端直接的通信采用websocket的方式进行连接。
8.作为本发明的一种优选技术方案,所述服务器端将不同的客户端连接,转发至不同的进程中进行处理,并对每个进程进行行为监控。
9.本发明的有益效果是:本发明提出了基于语言服务器协议 ,结合websocket即时通讯的一种轻量级在线代码协同编辑的方法,从而提高研发人员在线开发的效率;本发明将每个不同客户端与服务器端的websocket连接,转发到不同的进程上进行通信与语言服务,这样在一定程度上提高了语言服务器的稳定性。
附图说明
10.图1为本发明的系统框架图;图2为本发明webide-服务端应用放大图;图3为本发明系统框架的功效存储pvc放大图;图4为本发明语言服务器与客户端的交互过程图。
具体实施方式
11.下面结合附图对本发明的较佳实施例进行详细阐述,以使本发明的优点和特征能更易被本领域人员理解,从而对本发明的保护范围做出更为清楚明确的界定。
12.实施例:本发明提供一种技术方案:一种轻量级在线代码协同编辑的方法,具体步骤如下:步骤1:客户端发送initialize请求,包含一些初始化参数,服务器端收到请求后开始准备启动语言服务,之后服务器端会发送initialized通知到客户端,语言服务开始工作;步骤2:初始化成功后服务器端可能会向客户端发送一些动态注册功能的请求client/registercapability;步骤3:每次打开一个文件,客户端需要向server发送一个textdocument/didopen请求,携带文件uri参数;同理关闭文件后要发送一个textdocument/didclose请求;步骤4:编辑文档时,当输入或按下语法提示快捷键时,客户端发送textdocument/completion请求来获取智能提示列表;步骤5:当用户查询某个类/变量/方法的声明时(点击跳转),客户端发送textdocument/definition,服务器端将返回对应的文件uri及位置信息,客户端需要实现打开这个新文件的方法;
步骤6:当用户关闭编辑器时,客户端先发送shutdown请求,服务器端收到请求后会立即关闭但并不会退出进程,而是等待客户端发送exit通知。
13.不同客户端与服务器端直接的通信采用websocket的方式进行连接;所述服务器端将不同的客户端连接,转发至不同的进程中进行处理,并对每个进程进行行为监控。
14.如图1-3所示,客户端web页面的代码编辑器(简称为webide)与语言服务器之间,通过websocket通信协议进行连接与通信,语言服务器在监测到客户端连接请求时,会解析请求内容,根据请求加载目标工程,语言服务器为webide提供包括代码提示与自动补全等在内的功能,并监控记录各客户端连接的状态,如连接客户端信息、连接开始时间、连接成功时间、连接保持时间、连接断开时间、断开原因等;当监测到客户端非主观断开连接时,例如由于网络波动等因素断开连接时,客户端会自动发起重连,保证连接的稳定性。
15.如图4所示,当研发人员在web页面上打开代码编辑框时,它将在内部初始化工作区,然后导入在客户端当前工作目录中找到的所有java项目,当用户与java文件进行交互时,客户端将向语言服务器提交请求。 服务器允许客户端为用户提供的功能包括但不限于:(1)键入时报告分析和编译错误;(2)代码完成(提示与自动补全);(3)代码自动生成;(4)代码导航;(5)代码格式化;(6)代码操作(快速修复);(7)javadoc徘徊;(8)类型搜索。
16.lsp消息大体来说分为三种类型:通知 (notifiction)、请求 (request)、与日志及错误信息(logmessage/showmessage)。通信是双向的,客户端可以向服务器端发送请求/通知,比如打开文件、修改文档内容等。服务器端也可以向客户端发送请求/通知,比如动态注册客户端功能。每个请求需要使用id为唯一标识符,对这个请求的返回值也应当包含这个id,一般来说id为递增的数字。
17.本发明提出了基于语言服务器协议 ,结合websocket即时通讯的一种轻量级在线代码协同编辑的方法,从而提高研发人员在线开发的效率;本发明将每个不同客户端与服务器端的websocket连接,转发到不同的进程上进行通信与语言服务,这样在一定程度上提高了语言服务器的稳定性。
18.以上实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1