[请教] Common Lisp的WebSocket 是否不成熟不该用?

忍得了初一,忍不了清明
Common Lisp 的 WebSocket 还不成熟吧(毕竟WebSocket也是近不到10年才有的, 而Lisp早两十年)? 我用的是 Hunchensocket(也试过 websocket-driver), 一直是有点小问题,例如用户每次断开连接时会报错(作者也声明了暂时解决不了,不过不影响程序)

上传二进制文件(例如图片)不能正常
但是我已经建立好了自己基于WebSocket的后台框架(比HTTP框架简单许多)

我突然想到,能不能用 node.js 的 WebSocket (第三方的)框架作一个中介, 接受到客户端的数据, 可以处理某些请求例如文件上传, 再与 Lisp(当然运行在同一个主机) 建立 TCP socket(SBCL 2.3.1 User Manual) 框架来搭配?
我试过用node的 WebSocket 框架挺快, 上传文件是秒传, 大多数开发者(和我以前)是用 socket.io
实际上也是先经过nginx, 也就是从用户到Lisp总共有3个socket连接, 应该也不会对速度影响多大吧?

请教这可行吗?
还是说大多数就是这样用的? 都是多个服务器通过socket来实现"混合双打"? 性能也不会多耗费多少?
某些请求用node来处理,某些用Lisp来处理?

某些应用(可能很多?)在node上已经有成熟的npm包了, 而Lisp可能要麻烦得很
例如昨天我才用上的管理员在创建产品时后台自动生成海报, 用的是 node-canvas [GitHub - Automattic/node-canvas: Node canvas is a Cairo backed Canvas implementation for NodeJS.] (客户端包括小程序, 生成再上传也可以但是更麻烦), 而用 Lisp 来做麻烦多了(也因为我对 JavaScript 的 canvas 已经经验丰富了吧…)
当前做法是CL每次请求通过 run-program(shell) 新建一个node进程来生成这个海报

并不常见,一般来讲一个 webocket 就够了。两个的场景就是有一个是连 dev server 做 hot reload 之类的。

websocket 是一个, 因为链接客户端, 我指的不是客户端跟 node 和 Lisp 各建立一个webSocket, 而是 后台的node和Lisp建立 TCP socket, 也就是node也是做一个中间层(就像 NGINX)
原因是 Lisp 有点"不擅长"创建 WebSocket, 所以找个node来担个中介 (我还不确定是否可行, 所以请教)

我觉得这不是个好的技术选型,显然 node 比 common lisp 更适合干这类事。当然你一定要 common lisp 的话,也可以自己做轮子的。

PS,nginx 做代理是常见的,我是觉得选这两个语言协作并不好。

我已经用 Common Lisp 搭建好了自己的框架且已经实现了自己需要的绝大多数功能了(不过大部分就是调用自定义的Postgres函数), 但有少部分问题我想改用其它语言来解决更方便了
某些地方也是直接调用工具进程, 例如处理用户上传的图片/头像( ImageMagick ), 2年前还真不会这一招

仅仅只是上传文件图片不用WebSocket也可以的吧,通过http就能传,也能用js取到上传进度,当然用WebSocket上传也是很不错的,可定制程度应该更高

是的, 我现在就是HTTP上传的, 稍微麻烦一点的是要多一个权限验证
因为用 WebSocket 验证就简单多了一次就够了

不过这些不是重点, 重点是我现在已经确定了后台是用WebSocket + (Common Lisp 而不是 node.js), 但是Common Lisp的WebSocket 框架很不成熟, 例如每个会话结束的时候标示错误(但不影响, 因为用户已经断开了), 上传不了文件(而在node很简单), 所以担心会不会迟早又遇到更棘手的问题…
所以我想用熟悉的node.js 做一个中间层来建立WebSocket获取客户端数据, 再通过 原生Socket于Common Lisp 主服务器传输大部分数据, 就相当于 Express/Koa 框架的一个 验证层
例如:

服务端就通过增加两行代码和在Postgres的函数, 客户端(JavaScript) 也只需要一行代码就请求了, 不觉得非常简单吗? 要修改数据的时候只需要修改Postgres的函数, 不用动服务器
我甚至弄了更简单的只需要一行代码 (如果不需要参数, 例如数据总览, $memorize 就是缓存这个请求)

服务器端数据多转发几层也可以的,客户端除了js还是js,但服务器端不一样,可以多种编程语言共用(楼主用了lisp想必也是不怕被项目后续接手维护的人xxx)。比如我服务器端主要用的是php,需要用nodejs时直接 echo file_get_contents("http://localhost:3000");,也懒得去研究其它传数据的办法了。

可能很多人也想用Common Lisp,但因为在国内用的人太少等原因不敢用,望楼主用过后也能写篇文章分享经验心得,让有心想用的人少踩一点坑

是啊 之前的项目我都是只会用node, 现在知道应该可以搭配 child_process 少了很多时间去早npm对应的代码库(例如图片处理), 甚至其实很多npm代码库本身就是通过child_process来实现的(我猜)
去年开始用 Lisp, 从 Hunchentoot 开始入手, 积累自己的基本代码库, 然后是服务器库(模仿node的 Express/Koa) 自我任务灵活性已经不输给Express了(本人起名为 smart-server canskit management-system 这几个都是其它项目共用的项目) 真是每做一个项目花的时间越少!!

我也上传到了GitHub(不过最近半年不断在优化更新没有上传上去) 不过没人会看到的呢 因为根本没人用

没关系, 毕竟黑客也不多, 用Lisp 的很少, 有兴趣优化地球的人也不多

现在很多也是前端编译后再上传了, 可以不是js了, 例如TypeScript, 不过我体验了TS后还是觉得JS更好用, 现在JS已经越来越完善了, 毕竟是Lisp的后裔 而Common Lisp 就可以只靠用户来去完善嘛(第一无二的macro 代码的语法与数据想通 就是空格隔开的list 我觉得确实更接近大自然)