造个小轮子:Common Lisp 服务器

最近看了下书的Socket这一章节,趁着心理还有点点热度,试试用原生socket写一个Lisp版本的简单静态文件服务器
代码加起来就3~4kb,一百行不到,调用的第三方库主要就是编码(gzip),实现了长连接以减少调用次数
Connection: keep-alive
估计用C语言来实现要累得多,不过这里没有用到macro,也没有缓存静态文件以减少每次重新读取

示例:
nginx 代理后:http://chaos.leovinci.cn/
直接Lisp: http://chaos.leovinci.cn:2245/

(start-server :port 2022 :root "~/somewhere/static")

疑问:我特意增加了一个Keep头字段,显示同一个 socket 加载了第几个request,对那些很多js/css要加载的网页就很有用了:
image
意外的是刷新页面后该字段在不断增大(同样的Port应证了是同一个socket)
难道刷新页面后有些socket不会立刻中断??

6 个赞

下一步,实现自己的WebSocket server,不用再依赖 Hunchensocket ?

1 个赞

也许可以用elisp实现http服务器,我一直挺想做的事,不知道这样能否实现以web的方式使用emacs,我现在只能做到 以web的方式使用org-mode

我是大量通过ssh来访问Emacs了,这也是我用控制台版本而不是桌面版的优势?
讲道理通过web-socket也是可以实现的吧?现在暂时想到的问题就是怎么在其他进程读取Emacs的输出和传递输入?既然ssh可以做到那就说明可以的吧??

因为不需要通过canvas,实现网络版 应该速度也会贼快
用到了应该也不慢,因为不用传像素,只需要传指令

突然想到tmux是否也是这个思路,可以多台不同网络的机器同步