WebSocketd使用介绍

WebSocketd是WebSocket的守护进程(命令行工具),负责处理WebSocket连接,并启动服务器应用程序来处理WebSockets,在应用程序和Web浏览器之间传递消息,无需任意依赖包且进程独立。WebSocketd是一款非常特别的WebSocket服务器,它的最大特点是后台脚本不限语言,其标准输入stdin就是WebSocket的输入,标准输出stdout就是WebSocket的输出。

WebSocketd本质上是命令行的WebSocket代理,只要在命令行可以执行的程序,都可以通过它与浏览器进行WebSocket通信。

官网:

安装:

下载:
wget https://github.com/joewalnes/websocketd/releases/download/v0.3.1/websocketd-0.3.1-linux_amd64.zip
unzip websocketd-0.3.1-linux_amd64.zip

环境变量:
解压后是一个二进制文件,将websocketd二进制复制到/usr/bin目录下即可。

简单示例:

1)shell脚本

#!/bin/bash
for ((COUNT = 1; COUNT <= 10; COUNT++)); do
  echo $COUNT
  sleep 1
done

2)启动websocketd:

chmod 777 count.sh
nohup websocketd --port=63800 ./count.sh >/dev/null 2>&1 &

3)浏览器测试:

var ws = new WebSocket('ws://192.168.18.12:63800/');
ws.onopen = function() {
    console.log('CONNECT');
};
ws.onclose = function() {
    console.log('DISCONNECT');
    ws.close();
};
ws.onmessage = function(event) {
    console.log('MESSAGE: ' + event.data);
};
打开chrome一个tab,F12进入开发模式,打开console,将上述代码输入进去即可。

4)html文件:

<!doctype html>
<html lang="">
<head>
    <meta charset="utf-8">
    <meta name="description" content="">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta http-equiv="x-ua-compatible" content="ie=edge">
    <title>websocketd</title>
</head>
<body>
<h2>websocketd 客户端的简单测试</h2>
<pre id="log"></pre>
<script>
    // helper function: log message to screen
    function log(msg) {
        document.getElementById('log').textContent += msg + '\n';
    }

    // setup websocket with callbacks
    var ws = new WebSocket('ws://192.168.18.12:8080/');
    ws.onopen = function() {
        console.log('CONNECT');
    };
    ws.onclose = function() {
        console.log('DISCONNECT');
        ws.close();
    };
    ws.onmessage = function(event) {
        console.log('MESSAGE: ' + event.data);
    };
</script>
</body>
</html>

客户端js可能会出现超时链接的,可以使用这个库ReconnectingWebSockethttps://github.com/joewalnes/reconnecting-websocket

分析:websocketd启动后会监听对应的websocket端口,当有客户端再次连接上时,websocketd会执行对应的shell脚本,并将每一步的标准输出作为消息发送到websocket通道。执行完shell脚本后,websocketd会断开本次连接,再次处于监听状态,当有请求到来会再次执行脚本...

说明支持多client连接,每个client连接后,都将看到count.sh从头开始运行的过程数据(应该是独立的,每来一个请求,被包装的脚本从头运行)

注意:这里使用了一个shell脚本作为例子,其实我们可以将任何语言的程序(python、java...)输入给websocketd。详情见:https://github.com/joewalnes/websocketd/tree/master/examples

websocketd参数:

1)--staticdir:

staticdir表示允许WebSocketd作为静态文件提供,也就是说在当前项目指定通知执行的语言脚本同名的Web页面作为静态文件。

$ websocketd --staticdir=. --port=9501 ./test.sh

2)--devconsole:

devconsole标志会使内置的控制台WebSocketd与WebSocket端点进行手工交互。改参数主要是用来调试,调试带有交互功能的程序,手写js比较不方便,官方也给出了调试模式:https://github.com/joewalnes/websocketd/wiki/Developer-console

注:devconsole与staticdir不能不同使用,内置开发控制台旨在提供临时用户界面,用于构建真实的用户界面。

3)为websocketd配置nginx代理:

$ vim test.conf
server {
    listen 443 ssl http2;
    server_name www.test.com;
 
    ssl_certificate /etc/test/full_chain.pem;
    ssl_certificate_key /etc/test/private.key;
 
    location /wssd
    {
        proxy_pass http://lnmp-php:8888;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_read_timeout 600;

    }
}

上面的例子是单向数据(服务端——>客户端),接下来看一个交互性更强的例子(greeter.py)

脚本

from sys import stdin, stdout

# For each line FOO received on STDIN, respond with "Hello FOO!".
while True:
  line = stdin.readline().strip()
  print('Hello %s!' % line)
  stdout.flush() # Remember to flush

启动websocketd:

chmod +x count.py
websocketd --port=8080 ./greeter.py

前端html:

<!DOCTYPE html>
<head>
<title>websocketd test</title>
</head>
<body>
<pre id="log"></pre>
<script>
  // helper function: log message to screen
  function log(msg) {
        document.getElementById('log').textContent += msg + '\n';
  }
  // setup websocket with callbacks
  var ws = new WebSocket('ws://localhost:8080/');
  ws.onopen = function() {
          log('CONNECT');
          // input
          ws.send("wwj");
  };
  ws.onclose = function() {
        log('DISCONNECT');
        ws.close();
  };
  ws.onmessage = function(event) {
        log('MESSAGE: ' + event.data);
  };
</script>
</body>

参考:

https://www.jianshu.com/p/385d2ecf718f

https://www.cnblogs.com/tinywan/p/6826125.html

https://blog.just4fun.site/post/%E5%B7%A5%E5%85%B7/websocketd/#%E4%B8%80%E4%B8%AA%E5%8F%AF%E4%BA%A4%E4%BA%92%E7%9A%84%E4%BE%8B%E5%AD%90

https://www.ruanyifeng.com/blog/2017/05/websocket.html

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
websocketd是一个轻量级的WebSocket服务器,它可以让你使用命令行工具将任何命令行程序转换为WebSocket服务。在Windows上使用websocketd,您可以按照以下步骤进行操作: 1. 下载websocketd:你可以从websocketd的官方GitHub页面(https://github.com/joewalnes/websocketd)上找到最新版本的websocketd可执行文件。 2. 解压缩websocketd:将下载的websocketd文件解压缩到你选择的目录中。 3. 打开命令提示符:在开始菜单中搜索"cmd",找到并打开命令提示符。 4. 切换到websocketd所在的目录:在命令提示符中,使用"cd"命令切换到你解压websocketd的目录。 5. 运行websocketd:在命令提示符中,输入以下命令来运行websocketd: `websocketd --port=8080 your-command`。(这里的“your-command”是你要转换为WebSocket服务的命令行程序的路径,比如一个Python脚本或者一个可执行程序)。 6. 连接到WebSocket服务:在浏览器中打开一个WebSocket客户端(比如JavaScript WebSocket对象),然后将其连接到`ws://localhost:8080`。你将能够收发数据和执行从命令行程序返回的输出。 需要注意的是,将websocketd用于Windows上可能需要一些额外的配置和设置。确保你的防火墙允许websocketd运行,并且已经安装了WebSocket客户端。此外,你还需要了解如何使用命令行程序,以便正确配置websocketd命令。 总结起来,使用websocketd在Windows上可以将任何命令行程序转换为WebSocket服务,使你能够通过WebSocket客户端连接并与命令行程序交互。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赶路人儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值