如何在vscode-ws-jsonrpc中打开Socket?服务器端socket变量赋值问题
如何在vscode-ws-jsonrpc服务器端打开WebSocket并赋值socket变量?
嘿,我来帮你理清这个问题~在vscode-ws-jsonrpc的服务器端场景里,你得先搞清楚一个核心点:vscode-ws-jsonrpc本身并不提供WebSocket服务器的实现,它是基于已经建立好的WebSocket连接来封装JSON RPC通信的。所以我们需要先借助一个WebSocket服务器库(比如Node.js生态里常用的ws库)创建服务器、监听连接,再把得到的WebSocket实例适配成vscode-ws-jsonrpc要求的类型,赋值给socket变量。
具体实现步骤(以Node.js + ws库为例)
1. 先安装依赖
确保你已经安装了必要的包:
npm install ws vscode-ws-jsonrpc
2. 完整代码示例(带注释)
import * as rpc from 'vscode-ws-jsonrpc'; import * as WebSocket from 'ws'; // 第一步:创建WebSocket服务器,监听指定端口(比如8080) const webSocketServer = new WebSocket.Server({ port: 8080 }); // 第二步:监听新的客户端连接事件 webSocketServer.on('connection', (rawWs: WebSocket) => { // 关键:把原生的WebSocket实例适配成rpc.IWebSocket类型的对象 const socket: rpc.IWebSocket = { // 实现发送消息的方法 send: (content) => rawWs.send(content), // 绑定消息监听回调 onMessage: (callback) => rawWs.on('message', callback), // 绑定错误监听回调 onError: (callback) => rawWs.on('error', callback), // 绑定连接关闭监听回调 onClose: (callback) => rawWs.on('close', callback), // 实现销毁连接的方法 dispose: () => rawWs.close() }; // 现在socket变量已经就绪,可以用来创建JSON RPC连接了 const rpcConnection = rpc.createWebSocketConnection(socket, console); rpcConnection.listen(); // 举个例子:注册一个RPC方法供客户端调用 rpcConnection.onRequest('greet', (params) => { return `Hello, ${params.username}!`; }); }); console.log('WebSocket RPC server is running at ws://localhost:8080');
3. 为什么要做适配?
因为rpc.IWebSocket是vscode-ws-jsonrpc定义的一个标准接口,它只关心WebSocket连接的核心能力(发消息、监听事件、销毁连接),而不同的WebSocket库(比如ws、socket.io的WebSocket模式)的API细节可能不一样。通过这种适配方式,你可以灵活对接任何WebSocket实现,不用受限于特定库。
其他场景的适配思路
如果你用的不是Node.js,而是Java、Python等其他语言,核心逻辑是一样的:
- 先通过对应语言的WebSocket服务器库启动服务器,获取到客户端的连接实例
- 实现
IWebSocket接口要求的所有方法,把原生连接的方法映射进去 - 将适配后的对象赋值给
socket变量,再传入vscode-ws-jsonrpc的连接创建方法
内容的提问来源于stack exchange,提问作者Manu
相关产品推荐
相关产品推荐

