世界上最伟大的投资就是投资自己的教育

首页WebSocket
随风 · 练气

Websocket 学习笔记系列文章教程之 客户端与服务器端的交互 (二)

随风发布于7862 次阅读

在我们测试和使用 websocket 之前,我们必须要有一个现成的 websocket 服务器,最好能够快速搭建一个,所以现在必须快速搭建一个 websocket 服务器,在这里,分别介绍一个 c++ 和 go 语言写的 websocket server 的库,还有,还会介绍如何用 JavaScript 来测试 websocket server,方便我们了解整个 websocket 的工作流程。

1. Simple-WebSocket-Server

Simple-WebSocket-Server是用 c++ 语言写的工具。只需几行命令,就可以轻易地搭建 websocket 服务器。

git clone https://github.com/eidheim/Simple-WebSocket-Server
cd Simple-WebSocket-Server
cmake .
make

编译完成之后会产生两个可执行文件,其实是两个 demo 程序,也是服务器端程序,分别是ws_exampleswss_examples,其中wss_examples是对应 SSL 加密的,需要证书,我们这里只需要ws_examples,先不管wss_examples

运行ws_examples

$ ./ws_examples
Server: Opened connection 140361834957120
Client: Opened connection
Client: Sending message: "Hello"
Server: Message received: "Hello" from 140361834957120
Server: Sending message "Hello" to 140361834957120
Client: Message received: "Hello"
Client: Sending close connection
Server: Closed connection 140361834957120 with status code 1000
Client: Closed connection with status code 1000

这个程序演示了 websocket 连接的整个过程,它先是在服务器端开启 websocket 服务,然后客户端连接上来,并发送"hello"给服务器端,服务器端接收后,又把"hello"这条信息发给客户端,客户端接收了"hello"之后,客户端请求关闭连接,服务器端接收到客户端发送的关闭连接的请求后,就关闭了连接,最后,客户端也关闭了连接,整个流程就结束了。

2. JavaScript 访问 websocket 服务

现在服务器也搭起来,要让客户端能够连接上去,只需要使用 JavaScript 就可以了。也是几行代码就能搞定。

打开 chrome 浏览器的开发者工具,切换到console标签。

输入下面的指令。

new WebSocket("ws://localhost:8080/echo")

如下图所示:

Simple-WebSocket-Server默认是监听在 8080 端口的,且路径是/echo

有一个地方值得注意,你需要在 localhost 域名下访问 WebSocket 服务。

现在来给 WebSocket 服务器发送一条字符串"hello"。

ws = new WebSocket("ws://localhost:8080/echo");
ws.onmessage = function(evt){console.log(evt.data);};
ws.onopen = function(evt){
  ws.send("Hello");
}

其实就是利用onmessageonopen这两个回调函数,ws.send("Hello");表示向服务器发送"hello"。onmessage这个回调会把服务器的输出用console.log打印出来。效果如下:

最后,客户端要发送关闭连接的指令。

ws.close();

整个过程的代码可以是这样子的。

var ws;
window.onload = function(){
  ws = new WebSocket("ws://localhost:8080/echo");
  ws.onmessage = function(evt){console.log(evt.data);};
  ws.onopen = function(evt){
    ws.send("Hello");
  }
}
window.onclose = function(){
  ws.close();
}

3. websocketd

Turn any program that uses STDIN/STDOUT into a WebSocket server. Like inetd, but for WebSockets.

websocketd是一个用 go 语言写的工具,它可以让你的程序跑在 websocket 中。

我们来演示一下就清楚了。首先是安装。

如果是 mac 系统,可以这样。

$ brew install websocketd

如果是其他平台,可以找到相应的安装包,地址为: https://github.com/joewalnes/websocketd/releases。

接下来我们创建一个文件,叫count.sh,内容如下:

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

这个 shell 脚本是每隔一秒就输出一个数字,数字从 1 到 10。

然后执行下面的指令,给这个文件加上可执行的权限。

$ chmod +x count.sh

最后运行这个 websocket 服务器。

$ websocketd --port=8080 ./count.sh
Thu, 07 Apr 2016 14:54:06 +0800 | INFO   | server     |  | Serving using application   : ./count.sh 
Thu, 07 Apr 2016 14:54:06 +0800 | INFO   | server     |  | Starting WebSocket server   : ws://MacintoshdeMacBook-Air.local:8080/

测试方法跟上文所讲的一样,服务器仍然监听在 8080 端口,只不过路径是/

本篇完结。

下一篇:websocket 之客户端详解 (三)

本站文章均为原创内容,如需转载请注明出处,谢谢。

2 条回复
相关小书
websocket教程

websocket教程

从websocket的介绍开始,从入门到精通

发表于

喜欢
统计信息
    学员: 29915
    视频数量: 1996
    文章数量: 526

© 汕尾市求知科技有限公司 | Rails365 Gitlab | 知乎 | b 站 | csdn

粤公网安备 44152102000088号粤公网安备 44152102000088号 | 粤ICP备19038915号

Top