前端JS代码如何操作后端程序产生的对象?
本帖最后由 Sly 于 2025-7-7 10:55 编辑朋友让帮忙问的问题+他刚发来的修改:
这里对象指的是不仅有数据字段,还有各种方法、包括对其他对象的引用的不可序列化对象。
因此存在2个问题:
1. 对象生命周期短:前后端每次连接中,后端产生的所有对象似乎都会在连接完成后被销毁。
虽然可考虑一些持久化方案,但这似乎只对单纯存储数据的对象适用。
2. 通信接口是非面向对象的:典型的HTTP方式中后端暴漏的接口完全就是一个个独立的方法,导致其丧失了面向对象的特性,造成写个代理模式的方法也无法方便操作。
这也就共同体现在前端无法操作后端的对象,只能使用传参一些数据、返回一些数据的方式。
好像主流框架,甚至主流平台体系完全不赞同这个做法。
方案一似乎可以用WebSocket方式解决,方案二毫无办法。
补充场合:
1、不需要大并发,不需要负载均衡
2、后端是内存安全平台,大概率他们就是Java那一套
补充用途:
1、该软件不是一个面向数据库开发的业务软件,只有少量数据需要存储。持久化数据不是程序关键;
2、也不是一个需要用户安全认证的软件,没有登录、更不需要RBAC;
3、该软件就是为了多人可以同时使用某个计算模型,并共享少量数据,而且为了方便使用采用的浏览器内运行的方式。
本质是将一个单机桌面软件拆分成服务端+客户端。后端产生的复杂业务对象,和当时桌面程序一样,可以直接无保留的供前端灵活使用。或者说改为Web程序也想这样,此时用Vue重写老WPF行了,同时可以减少对后端代码的修改。 安全原因呗,只要牵扯到指针,那必然会引起泄露,只要泄露那就可以干任何事情。 传指针和 vtable 就行了 朋友让帮忙问的问题
你说的这个朋友是不是你自己. 写过 200 行以上任何代码的人, 不会问出这种问题. 本帖最后由 Sly 于 2025-7-7 10:27 编辑
xy. 发表于 2025-7-7 10:23
你说的这个朋友是不是你自己. 写过 200 行以上任何代码的人, 不会问出这种问题. ...
不是,我并不搞这种我觉得无聊的行业。
因为搞这种行业的人普遍更加有个凸显的特点,就是觉得别人都是傻逼,只有自己最牛逼。 Sly 发表于 2025-7-7 10:25
不是,我并不搞这种我觉得无聊的行业。
因为搞这种行业的人普遍更加有个凸显的特点,就是觉得别人都是傻 ...
后半句不一定. 前半句还真是. 你问的这个还真就是纯啥比问题. 你是经常被人当作傻逼吧,能问出这种问题也正常 本帖最后由 Sly 于 2025-7-7 10:37 编辑
mawer111 发表于 2025-7-7 10:34
你是经常被人当作傻逼吧,能问出这种问题也正常
我不清楚这个问题具体想表达什么,我只是转发。
但是你的言论似乎更加凸显和证明了,果然那个行业就是互相认为是傻逼 描述不清楚 功能不明确 打回重写
功能点都不清楚要干什么 怎么能解决问题 本帖最后由 Sly 于 2025-7-7 10:59 编辑
casc 发表于 2025-7-7 10:44
描述不清楚 功能不明确 打回重写
功能点都不清楚要干什么 怎么能解决问题 ...
我让他补充一下
更新:他发来了。 问题都描述不清楚,一直在纠结各种概念和定义,牛头不对马嘴
而且无论何种情况,把后端数据直接暴露出来修改都是应该严禁的,因为前端没有安全性可言
如果真想改,有个终极解决方案,直接装一个数据库编辑网页,比如phpMyAdmin,想怎么改后端怎么改 上GraphQL接口,自己爱怎么折腾怎么折腾。 本帖最后由 Sly 于 2025-7-7 11:10 编辑
sagnitude 发表于 2025-7-7 10:48
问题都描述不清楚,一直在纠结各种概念和定义,牛头不对马嘴
而且无论何种情况,把后端数据直接暴露出来修 ...
他补充了
他们这个软件就是单机桌面版软件改的,自己小组用,不需要安全性(登录这个功能都没有。前端可以随便修改甚至破坏后端的东西——虽然这么做没有必要),可用性和低成本的改造是更需要。
有个我自己发现的问题,好像不止一个人强调安全性,从2楼开始就强调。难道所有场合和用途的Web程序都必须讲安全性么?桌面程序讲了么,如果讲了哪来那么多内存修改器。所以如果本就是单机或者少量固定人用的Web程序,而且还不是数据库相关的,需要非得强调各种安全么?非故意情况下不出现运行bug不就行了么 本帖最后由 lwmq 于 2025-7-7 11:13 编辑
我想了半天也没搞明白啥意思,web前端想调用后台对象无论如何不也是要通过http接口吗?
后台对象序列化给前端调用是什么鬼
-------------
想操作同一个对象把对象仍在web服务的内存里,前端传调用方法的参数不也就可以了吗?
有问题不去csdn查跑来chh问也是挺奇怪了
------------
话说都想到websocket了不如考虑一下jmx?反正都不是什么正经解决方案 既然这样,还搞什么前后端分离。。。 Sly 发表于 2025-7-7 10:57
他补充了
他们这个软件就是单机桌面版软件改的,自己小组用,不需要安全性(登录这个功能都没有。前端可 ...
因为如果是正经软件,安全性这样子过不了验收,上线会出大事
即使是内部工具,也没法保证出问题之后可以追责
比如去年字节有个实习生直接改了线上训练的模型,哪怕是内部使用的工具,也不能没有安全性,也不能不讲操作审计
https://baike.baidu.com/item/2024%E5%B9%B4%E5%AD%97%E8%8A%82%E8%B7%B3%E5%8A%A8%E5%A4%A7%E6%A8%A1%E5%9E%8B%E8%AE%AD%E7%BB%83%E8%A2%AB%E5%AE%9E%E4%B9%A0%E7%94%9F%E6%94%BB%E5%87%BB%E4%BA%8B%E4%BB%B6/65011613?fr=aladdin
如果是自己用的,那这样回复,
1. 如果你用的后端语言支持 eval 这种万能灵药,直接前端写脚本后端执行
2. 数据是存在数据库,或者redis,用web客户端修改,数据库本来就是用来共享数据方便多人修改的
3. 如果后端支持在线编译或者在线替换 (hot load),比如java,c,自己做个方法执行下,做个rpc
4. 把后端直接暴露出来,如jmx
5. 除此之外你想修改数据,就必须每一个需求都写独立接口
针对此需求,数据库本来就是用来共享数据方便多人修改的,你不用数据库就是给自己加难度 sagnitude 发表于 2025-7-7 11:19
因为如果是正经软件,安全性这样子过不了验收,上线会出大事
即使是内部工具,也没法保证出问题之后可以 ...
我是没想明白对应后端功能暴露一个接口给前端调用有什么麻烦的……
折腾了半天简直是脱了屁放裤子,哪怕前端传个方法名后端直接if else去调用都没这么多屁事 lwmq 发表于 2025-7-7 11:09
我想了半天也没搞明白啥意思,web前端想调用后台对象无论如何不也是要通过http接口吗?
后台对象序列化给前 ...
他回复:
前端难以保持对后端某个对象的引用,难以快速的定位到某个对象,并且调用方法传入参数也可能涉及其他对象。
目前正在研究的一个办法是是后端维持一个对象哈希表,把key作为句柄的思路传递给前端,供前端未来调用和作为参数传入。然后用反射的思路把方法都暴漏给前端。 forfans 发表于 2025-7-7 11:15
既然这样,还搞什么前后端分离。。。
因为还得多人使用 本帖最后由 Sly 于 2025-7-7 11:39 编辑
sagnitude 发表于 2025-7-7 11:19
因为如果是正经软件,安全性这样子过不了验收,上线会出大事
即使是内部工具,也没法保证出问题之后可以 ...
追责的问题暂不存在,这就和服务器上有个台账excel大家都能编辑。当然确实存在一个人故意搞破坏删除的可能性,但为了方便可以不至于非得加上一些安全验证。程序的目的是为了大家方便共同操作计算和分享分析结果。数据安全不是矛盾。
其他的已经转发他了,谢谢你的回复。 Sly 发表于 2025-7-7 11:24
他回复:
前端难以保持对后端某个对象的引用,难以快速的定位到某个对象,并且调用方法传入参数也可能涉 ...
说了半天就是想让对象常驻内存然后保证同一个用户反复使用啊……
那办法不是多了去了…… lwmq 发表于 2025-7-7 11:27
说了半天就是想让对象常驻内存然后保证同一个用户反复使用啊……
那办法不是多了去了…… ...
不是同一个用户,可以给多个用户(客户端浏览器)调用。 Sly 发表于 2025-7-7 11:28
不是同一个用户,可以给多个用户(客户端浏览器)调用。
你说的就是我说的意思 lwmq 发表于 2025-7-7 11:48
你说的就是我说的意思
可能还有的区别在于这个对象也还可以被其他客户端也调用
不是说某个对象固定隶属于某个客户端 问错地方了 问对了的地方 你会被吐槽的更臭。。。
本帖最后由 Sly 于 2025-7-7 13:47 编辑
moresun23 发表于 2025-7-7 13:16
问错地方了 问对了的地方 你会被吐槽的更臭。。。
我也发现了,无论什么情况和前提,他们在某个时期内只认可这个时期的主流解决方案,其他都是异端。 后端用数据库也没有问题啊,比如像sap这种,内存数据库,速度不慢啊, 如果只是所有人实时查看和控制服务器上的一堆会变的数据,然后可以接受一些修改命令,这些数据本身都是一些简单的参数和计算结果
后端把各类数据都生成一个句柄,对所有数据的读写操作包装一层,把句柄和接受的操作以及参数存到数据库里
前端读:用MQ监听变化(MQTT,etc),实时显示
前端写:把 句柄+参数+操作 包装成一个命令,发到MQ队列里
后端读:监听对象变化,或者每1秒广播一次所有数据的句柄和状态
后端写:监听命令队列,根据命令对数据依次进行操作
其实说到底就是一个腾讯文档 smallanntse 发表于 2025-7-7 13:49
后端用数据库也没有问题啊,比如像sap这种,内存数据库,速度不慢啊,
因为大部分内存数据库也只能保存数据,或者说对象需要是可序列化的。
对象中的其他引用就没了。 本帖最后由 Sly 于 2025-7-7 14:28 编辑
sagnitude 发表于 2025-7-7 14:08
如果只是所有人实时查看和控制服务器上的一堆会变的数据,然后可以接受一些修改命令,这些数据本身都是一些 ...
嗯嗯,目前确实是这个思路
只不过对象的某个方法里面的某个参数也有可能是其他对象,对象和对象之间是有关系的。
所以打算对象的引用在前端就用句柄代替。
后端维护一个哈希表,每生成一个对象就生成一个句柄作为key传给客户端。客户端用句柄来索引到对象,并且调用方法整个过程依靠反射来实现,反射也全部暴漏给前端。
方法如果需要的某个对象作为参数,也用句柄作为参数来代替对象的引用,后端在反射的相关代码里面再查表反转过来。
页:
[1]
2