Websocket 系列之初识websocket(一)

Websocket 系列之初识websocket(一)

月光魔力鸭

2020-06-22 17:08 阅读 666 喜欢 1 websocket 系列

最近在做直播,是用的webrtc,然后找的免费的starrtc ,当然,可能由于种种原因吧.. 用起来并没有特别顺畅,后续还希望能够深入这部分,从现在开始学习..当然,websocket 是顺带的,可以用来发消息什么的肯定也是要用到的。

准备将最近一阵子学习websocket的记录和练习以及一些理解记录下来。

当然,写这篇文章的时候,其实我也刚刚把helloworld跑起来,以前的时候使用nodejs也做过聊天室啥的,但都比较简陋,也没有说比较系列。

当然,现在学的也不是多深入,但是会尽可能的详细一些,底层的东西也不懂,也不是说几天就能搞定的,光我的三级英语就够我喝一壶了 o(≧口≦)o

好了,话不多说,下面直接进入主题。


websocket 是什么

websocket 是一种浏览器与服务器间进行全双工通讯的网络技术,网络通信协议。 在以往的通信中,都是由客户端发起请求,由服务端接受到请求然后返回查询结果。 服务端无法主动向客户端推送信息,属于单向请求,如果服务端变化比较多或客户端需要实时的数据,那么在之前我们只能轮询。

"轮询",在客户端通过定时请求服务器来及时获得服务端的信息。

其中,使用websocket 最典型的场景就是聊天室,在没有websocket的时候,客户端要时时刻刻的请求查询服务端的新的消息,然后展示,非常浪费资源。

因此,有了websocket.

websocket 历史

诞生于2008年,2011年成为国际标准,目前所有浏览器(低版本不考虑)都已经支持,属于服务器推送技术的一种。

特点:

websocket的hello world

websocket 需要一个服务端,这里由于nodejs比较简单,直接使用了nodejs做后端支持。

后端代码

使用uwebsockets ,这个是阮大大推荐的,去看了下应该还不错,尝试用下。

npm i uNetworking/uWebSockets.js#v18.1.0

server code : app.js


// require('uWebSockets.js').SSLApp({
require('uWebSockets.js').App({

    /* There are tons of SSL options */
    // key_file_name: 'misc/key.pem',
    // cert_file_name: 'misc/cert.pem',

}).ws('/*', {

    /* For brevity we skip the other events */
    message: (ws, message, isBinary) => {
        if (!isBinary) {
            let content = Buffer.from(message).toString();
            console.log(`from client : ${content}`);
        }
        let ok = ws.send('hello,this is server', isBinary);
    }

}).any('/*', (res, req) => {

    /* Let's deny all Http */
    res.end('Nothing to see here!');

}).listen(9001, (listenSocket) => {

    if (listenSocket) {
        console.log('Listening to port 9001');
    }

});

安装后,运行是这样的。

server 运行

前端页面

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Scoket.io</title>
</head>
<body>
    websockets test,check console
    <script>
        var ws = new WebSocket("ws://localhost:9001");
        ws.onopen = function(evt) { 
            console.log("Connection open ..."); 
            ws.send("Hello WebSockets!");
        };

        ws.onmessage = function(evt) {
            console.log(evt);
            console.log( "Received Message: " + evt.data);
            ws.close();
        };

        ws.onclose = function(evt) {
            console.log("Connection closed.");
        };      
    </script>
</body>
</html>

index.html 通过anywhere-auth 运行后

可以看到已经连到服务端,并收到了服务端发来的消息。

server 在index.html 运行后收到的消息


至此,websocket的第一步helloworld 算是完成,不过这个时候还会有些疑惑,为什么感觉还是像http呢,发了请求收到数据... 下一章,我们继续来丰富功能。

转载请注明出处: https://chrunlee.cn/article/websocket-learn-day1.html


感谢支持!

赞赏支持
提交评论
评论信息 (请文明评论)
暂无评论,快来快来写想法...
推荐
上一章,我们学习和了解了websocket 是什么以及初始搭建,接下来,我们继续了解,如何进行广播以及对应的私聊呢。
之前看知乎相中了一个想法,给宝宝做一个站,上传生活的日常照片啊、视频之类的,存储肯定是在自己家里,然后做个穿透这样..开始做的时候又想着是时候接触下这些东西了,虽然公司都一点不用,但是自己没事接触下拓展下也是好的。
扩展程序中会有需要请求外部接口获取数据的时候,如果直接在JS中写的话,会跨域,但是谷歌扩展程序支持这种情况,只需要配置一下即可。
国庆马上来临,头像已经先热起来了,为了蹭蹭热度,赶紧加班搞了一个。
最近先研究下jenkins远程部署,在自己服务器上跑一个先,简单记录下碰到的问题。
整理一些相关的信息,防止后续再找不到。
之前做了一段时间的上传相关的断点续传和秒传功能,这里整理下大体思路
本篇文章以一个实际的小项目为主题进行从头到尾的讲解实现,该项目总计开发时长约6小时,主要是有很多页面或功能都是现成的,直接复制过来的,剩下的就调整下样式、字段内容等。