(require 'web-server)
(ws-start
(lambda (request)
(cond
;; 发现 websocket 请求,处理它
((ws-web-socket-connect
request
(lambda (proc string)
(process-send-string
proc
(ws-web-socket-frame (upcase string)))))
;; 保持连接
:keep-alive)
;; 普通的 HTTP 请求
(t
(let ((proc (oref request process)))
(ws-response-header proc 200)
(ws-send proc "Please connect to ws://localhost:8080.")))))
8080
nil
:host "0.0.0.0")
用命令行工具 websocat
测试:
~ $ echo hello | websocat -1 ws://127.0.0.1:8080/ HELLO
在浏览器里测试:
const ws = new WebSocket("ws://0.0.0.0:8080/");
ws.onopen = () => console.log("建立连接");
ws.onmessage = (msg) => console.log("收到数据:", msg.data);
ws.onclose = () => console.log("关闭连接");
ws.send("Hello, WebSocket Server!");
(require 'websocket)
(setq
my-ws
(websocket-open
"ws://127.0.0.1:3000"
:on-open
(lambda (ws)
;; (message "on-open: %s" ws)
(websocket-send-text ws "Hello"))
:on-message
(lambda (ws frame)
;; (message "on-message: %s, %s" ws frame)
;; (message "Received: %S"
;; (websocket-frame-text frame))
(websocket-send-text
ws
(upcase (websocket-frame-text frame)))
)
:on-close
(lambda (ws)
(message "on-close"))))
;; (websocket-send-text my-ws "Hello, World!!!!")
;; (websocket-close my-ws)
(setq
my-ws-server
(websocket-server
3000
:on-open
(lambda (ws)
(websocket-send-text ws "Welcome!"))
:on-message
(lambda (ws frame)
(websocket-send-text ws (upcase (websocket-frame-text frame))))
:on-close
(lambda (ws)
(message "on-close"))))
;; (websocket-server-close my-ws-server)
测试
~ $ websocat ws://127.0.0.1:3000 Welcome! hello HELLO cool COOL