宝哥软件园

基于html5和nodejs实现websocket均匀通信

编辑:宝哥软件园 来源:互联网 时间:2021-09-22

他们最近一直在研究HTML5,玩画布游戏等等,发现除了HTML5中强大的工具canvas之外,WebSocket也值得关注。可以作为双屏互动游戏。什么是双屏互动游戏?就是通过移动设备控制PC端的网页游戏。这种情况下,需要实时通信,WebSocket无疑是最适合的。与HTTP相比,WebSocket有很多优势,主要是WebSocket只建立了一个TCP连接,可以主动将数据推送到客户端,而且它还有更轻的协议头,减少了数据传输量。所以WebSocket暂时是实时通信的最佳协议。

至于选择nodeJs作为服务器语言,首先因为你是前端,熟悉javascript,自然会比其他后台语言更喜欢nodeJs;其次,NodeJs本身非常擅长以事件驱动的方式维护与大量客户端的高并发连接。所以我选择了NodeJs。

服务器的实现非常简单。首先安装一个名为nodejs-websocket的nodejs模块,直接键入nodeJs命令行:npm install nodejs-websocket然后就可以开始设置服务器了。因为nodejs-websocket模块,我们不需要自己做很多工作,直接调用别人打包的方法就可以了。

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

var ws=require(' nodejs-web socket ');Console.log('开始连接.')var game1=null,game2=null,game1ready=false,game2ready=falsevar server=ws . createserver(function(conn){ conn . on(' text ',function (str) {console.log('收到的信息是: ' str)if(str==' game 1 '){ game 1=conn;game1Ready=trueconn.sendText('成功');} if(str===' game 2 '){ game 2=conn;game2Ready=true} if(game 1 readygame 2 ready){ game 2 . sendtext(str);} conn . send text(str)})conn . on(' close ',函数(代码,原因){ console . log(' close connection ')});Conn.on('错误',函数(代码,原因){console.log('异常关闭')});}).listen(8001)console . log(' WebSocket成立')[game1代码]:点击获取三个盒子的内容,发送到服务器。

!doctype html html lang=' en ' head meta charset=' UTF-8 ' title document/title style。匡{ text-align : center;margin-top :200 px;} #mess{text-align: center}。值{ width: 200px高度:200 px;border:1px固体;文本对齐:中心;线高: 200 px;display:内联块;}/style/head body div id=' mess ' connecting./Div class='匡' div class=' value' id=' value1 '小明小明div class=' value ' id=' value2 '大咪咪/Div class=' value' id=' value3 '张晓张晓/div/div脚本var mess=document . getelementbyid(' mess ');if(窗口。WebSocket){ var ws=new WebSocket(' ws ://192 . 168 . 17 . 80:8001 ');Ws。on open=function (e) {console.log('服务器连接成功');ws . send(' game 1 ');} ws . onclose=function(e){ console . log('服务器关闭');} ws . onerror=function(){ console . log('连接错误');} ws . on message=function(e){ mess . innerhtml=' connection successed ' document . queryselector('。匡')。onclick=function(e){ vartime=new date();Ws.send(time' game1单击了“' e . target . innerHTMl '”);} } }/script/body/html[game 2 code]:获取服务推送的消息并显示。

!doctype html html lang=' en ' head meta charset=' UTF-8 ' title document/title style。匡{ text-align : center;margin-top :200 px;} # mess { text-align : center }/style/head body div id=' mess '/div script var mess=document . getelementbyid(' mess ');if(窗口。WebSocket){ var ws=new WebSocket(' ws ://192 . 168 . 17 . 80:8001 ');Ws。on open=function (e) {console.log('服务器连接成功');ws . send(' game 2 ');} ws . onclose=function(e){ console . log('服务器关闭');} ws . onerror=function(){ console . log('连接错误');} ws.onmessage=函数(e){ var time=new Date();mess . innerhtml=time ' message:' e . data ' br ' } }/script/body/html run截图:

代码很简单:很容易理解,nodejs-WebSocket的调用也很简洁明了。nodejs-websocket的API可以在介绍的https://www.npmjs.org/package/nodejs-websocket,找到。自己测试很容易,客户端的实现也很简单,可以通过on open、on message等几种方法来实现。

PS:节点的缺点

1.nodejs更新很快,可能会有版本兼容性。2.nodejs还不成熟,还没有生产出来。3.nodejs与其他服务器不同,它不支持不同连接的进程和线程操作。我们应该考虑Nodejs的不成熟,尤其是对于“长连接”的网络通信应用,同时权衡给我们带来的无限发展。

更多资讯
游戏推荐
更多+