ป้อนไดเร็กทอรี bin และดำเนินการคำสั่งต่อไปนี้บนบรรทัดคำสั่ง (หากต้องการดาวน์โหลด cli.exe ให้ไปที่บทความอื่นของฉัน: https://learnku.com/articles/67419)
. / cli . exe Websocket . php
1. สร้างการเชื่อมต่อ Websocket ในเบราว์เซอร์ (ขั้นแรกให้แทรกไฟล์ Websocket.js ลงในเบราว์เซอร์)
2. ลงทะเบียนฟังก์ชัน js ที่ต้องเรียกใช้บนออบเจ็กต์ไคลเอ็นต์
# 假设我们需要通过http调用btoa这个函数,第一个参数随便命名,第二个参数是函数执行的内容,需要自己定义执行内容
let client = ( new WebsocketClient ( "ws://127.0.0.1:9501" ) ) . start ( ) ;
client . registeCall ( "btoa" , function ( resolve , params ) {
let result = btoa ( params ) ;
resolve ( result ) ;
} ) ;
# 会输出一个访问地址,比如这样
[ 2022 / 4 / 24 18 : 16 : 01 ] [ info ] 连接到服务器成功
[ 2022 / 4 / 24 18 : 16 : 52 ] [ info ] 注册函数btoa成功
[ 2022 / 4 / 24 18 : 16 : 52 ] [ info ] 访问地址:http: //127.0.0.1:9501/call?group=ef8d3da2-dca4-4236-ba99-82f76a5e1901&action=btoa&input=
# 参数说明
group:客户端分组ID (不用管)
action:注册的需要调用的函数(不用管)
input:调用这个函数传入的参数(需要输入)
http://127.0.0.1:9501/call?group=df777a58-ff44-41bb-81ce-935b6bea9c25&action=btoa&input="abc"
คือ: ผลลัพธ์ของการดำเนินการ window.btoa("ss")
บ่อยครั้งพารามิเตอร์ที่เข้ารหัสถูกสร้างขึ้นโดยฟังก์ชันในไฟล์ js บางไฟล์ สิ่งที่เราต้องทำคือค้นหาตำแหน่งที่สร้างพารามิเตอร์ที่เข้ารหัสผ่านเบรกพอยต์ จากนั้นจึงแทรกสคริปต์ของเราแบบไดนามิกและใช้โค้ดภายนอกเพื่อเรียกมัน พบรหัสคีย์แล้ว ดังนั้นคุณเพียงแค่ต้องแทรกสคริปต์ของเราแบบไดนามิกเท่านั้น ซึ่งทำได้ในสองขั้นตอน
เราจำเป็นต้องเพิ่มฟังก์ชันการเข้ารหัสคีย์ให้กับตรรกะของการเชื่อมต่อกับ ws บันทึกเป็นไฟล์ js ใหม่ จากนั้นใช้การแทนที่หรือตัวเล่นซอของเบราว์เซอร์เพื่อแทนที่ไฟล์ js ที่เข้ารหัส หากเราพบฟังก์ชันการเข้ารหัส
function sign(){
// w函数存在其他地方
return w(x+y);
}
หลังจากเปลี่ยนมันแล้ว
function sign() {
// 动态注入js文件
(function () {
var newElement = document.createElement("script");
newElement.setAttribute("type", "text/javascript");
newElement.setAttribute("src", "https://github.com/kxg3030/js-rpc/blob/main/Websocket.js");
document.body.appendChild(newElement);
function startWs() {
var client = (new WebsocketClient("ws://127.0.0.1:9501")).start();
client.registeCall("a", function (resolve, params) {
// 重点!在这里我们主动调用w函数并传入参数
resolve(w(params));
})
}
setTimeout(startWs, 1000)
})();
// w函数存在其他地方
return w(x + y);
}
จากนั้นให้บันทึกไฟล์ js ที่แก้ไขแล้วแทนที่ไฟล์ js ต้นฉบับด้วยชื่อเดียวกันในหน้าเว็บ
เพียงใช้เซิร์ฟเวอร์ ws ภายนอกเพื่อสื่อสารกับเบราว์เซอร์
/ call 调用函数获取返回值
/ list 获取当前服务的websocket客户端数量