HTML5+NodeJs实现WebSocket即时通讯的示例代码分享


本文摘自PHP中文网,作者黄舟,侵删。

声明:本文为原创文章,如需转载,请注明来源WAxes,谢谢!

  最近都在学习HTML5,做canvas游戏之类的,发现HTML5中除了canvas这个强大的工具外,还有WebSocket也很值得注意。可以用来做双屏互动游戏,何为双屏互动游戏?就是通过移动端设备来控制PC端网页游戏。这样的话就要用到实时通讯了,而WebSocket无疑是最合适的。WebSocket相较于HTTP来说,有很多的优点,主要表现在WebSocket只建立一个TCP连接,可以主动推送数据到客户端,而且还有更轻量级的协议头,减少数据传送量。所以WebSocket暂时来说是实时通讯的最佳协议了。

  至于服务器语言选择nodeJs,一是因为自己是做前端的,对javascript比较熟悉,相比于其他后台语言,自然会更喜欢nodeJs了,二是NodeJs本身事件驱动的方式很擅长与大量客户端保持高并发的连接。所以就选择NodeJs了。

  服务器的实现很简单,先装一个nodeJs的模块,叫nodejs-websocket , 直接在nodeJs命令行中敲入:npm install nodejs-websocket回车就可以安装好了,然后就可以开始建立服务器了,因为有了nodejs-websocket模块,所以很多工作都不用我们自己做,直接调用别人封装好的方法就行了:

  【服务端代码】,根据客户端传来的消息判断哪个是game1,哪个是game2,保存connection对象。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

var ws = require("nodejs-websocket");

console.log("开始建立连接...")var game1 = null,game2 = null ,

game1Ready = false , game2Ready = false;

var server = ws.createServer(function(conn){

    conn.on("text", function (str) {

        console.log("收到的信息为:"+str)       

        if(str==="game1"){

            game1 = conn;

            game1Ready = true;

            conn.sendText("success");

        }        if(str==="game2"){

            game2 = conn;

            game2Ready = true;

        }        if(game1Ready&&game2Ready){

            game2.sendText(str);

        }

 

        conn.sendText(str)

    })

    conn.on("close", function (code, reason) {

        console.log("关闭连接")

    });

    conn.on("error", function (code, reason) {

        console.log("异常关闭")

    });

}).listen(8001)

console.log("WebSocket建立完毕")

【game1代码】:通过点击获取三个框的内容,传到服务器

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

<!doctype html><html lang="en"><head>

    <meta charset="UTF-8">

    <title>Document</title>

    <style>

        .kuang{text-align: center;margin-top:200px;}

        #mess{text-align: center}

        .value{width: 200px;height:200px;border:1px solid;text-align: center;line-height: 200px;display: inline-block;}

    </style></head><body>

    <p id="mess">正在连接...</p>

    <p class="kuang">

        <p class="value" id="value1">小明小明</p>

        <p class="value" id="value2">大胸大胸</p>

        <p class="value" id="value3">小张小张</p>

    </p>

 

    <script>

        var mess = document.getElementById("mess");       

        if(window.WebSocket){           

        var ws = new WebSocket('ws://192.168.17.80:8001');

 

            ws.onopen = function(e){

                console.log("连接服务器成功");

                ws.send("game1");

            }

            ws.onclose = function(e){

                console.log("服务器关闭");

            }

            ws.onerror = function(){

                console.log("连接出错");

            }

 

            ws.onmessage = function(e){

                mess.innerHTML = "连接成功"

                document.querySelector(".kuang").onclick = function(e){                   

                var time = new Date();

                    ws.send(time + "  game1点击了“" + e.target.innerHTML+"”");

                }

            }

        }    </script></body></html>

【game2代码】:获取服务推送来的消息,并且显示

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

<!doctype html><html lang="en"><head>

    <meta charset="UTF-8">

    <title>Document</title>

    <style>

        .kuang{text-align: center;margin-top:200px;}

        #mess{text-align: center}

    </style></head><body>

    <p id="mess"></p>

 

    <script>

        var mess = document.getElementById("mess");       

        if(window.WebSocket){           

        var ws = new WebSocket('ws://192.168.17.80:8001');

 

            ws.onopen = function(e){

                console.log("连接服务器成功");

                ws.send("game2");

            }

            ws.onclose = function(e){

                console.log("服务器关闭");

            }

            ws.onerror = function(){

                console.log("连接出错");

            }

 

            ws.onmessage = function(e){               

            var time = new Date();

                mess.innerHTML+=time+"的消息:"+e.data+"<br>"

            }

        }    </script></body></html>

运行截图:

  

以上就是HTML5+NodeJs实现WebSocket即时通讯的示例代码分享的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

HTML5 datalist标签的用法是什么?这里有datalist标签的用法实例

h5离线缓存是什么?h5 manifest离线缓存的应用(附代码)

HTML5实现桌面提醒功能的一个实例代码

htm5新增的表单元素keygen标签的用法和属性介绍

HTML5实现背景音乐的自动播放

h5的web本地存储如何使用

HTML5新增标签使用方法

浅谈nodejs文件模块中的fs.mkdir和fs.rmdir

HTML5中返回当前音频/视频的url的属性currentsrc

javascript中比较运算符隐式类型转换的介绍(附示例)

更多相关阅读请进入《HTML5》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...