WebSocket 开发模拟客户端与有游戏服务器通信

WebSocket 客户端测试功能

  websocket是有标准的通信协议,在h2engine服务器引擎中继承了websocket通信协议,使用websocket通信协议的好处是很多语言或框架都内置了websocket的支持,工具也非常多,可以非常方便的测试。比如在逻辑开发过程中,有时候协议定好了,但是由于客户端还没有及时完成相应功能,那么如果有个模拟的客户端就会非常的方便,这个模拟的客户端只要能够收发协议就好。websocket浏览器天然支持,所以用浏览器websocket实现模拟客户端非常的方便,使用的人直接省掉了按照客户端的麻烦,直接放到一个webserver上,所有人都能用。

WebSocket 与服务器通信实现

  协议设计,websocket与h2engine服务器引擎通信,协议头的格式是cmd:协议号(整型)\n数据,这里参考了http头的协议设计,以\n区别协议头和协议体,协议头可以有多个参数,逗号分隔,这里只用了cmd,保留了其他协议参数的能力。用字符串的协议头对js这种脚本语言更友好,更容易兼容其他语言。

var ws = undefined; var gHost = ''; function Log(Text, MessageType) { if (MessageType == "OK") Text = "<span style='color: green;'>" + Text + "</span>"; else if (MessageType == "ERROR") Text = "<span style='color: red;'>" + Text + "</span>"; else if (MessageType == "SEND") Text = "<span style='color: orange;'>" + Text + "</span>"; document.getElementById("LogContainer").innerHTML = document.getElementById("LogContainer").innerHTML + Text + "<br />"; var LogContainer = document.getElementById("LogContainer"); LogContainer.scrollTop = LogContainer.scrollHeight; }; function btnConnect(){ if (ws){ Log("连接已经建立!!。", "ERROR"); return; } gHost = document.getElementById("ip").value + ":" + document.getElementById("port").value; Log("begin connect:"+gHost) gHost += "/chat"; if ("WebSocket" in window) { ws = new WebSocket("ws://" + gHost); } else if("MozWebSocket" in window) { ws = new MozWebSocket("ws://" + gHost); } ws.onopen = WSonOpen; ws.onmessage = WSonMessage; ws.onclose = WSonClose; ws.onerror = WSonError; } function btnClose(){ if (ws) ws.close(); } function WSonOpen() { Log("连接已经建立。", "OK"); }; function btnSend(){ var cmdReq = $('#cmdSelect').val(); var dataReq = $('#dataReq').val(); var reqMsg = 'cmd:' + cmdReq + '\n'+dataReq; ws.send(reqMsg); }

WebSocket 基于浏览器实现的模拟客户端截图

  1. ip port 设置服务器ip端口
  2. 协议号用于填写协议号,整型
  3. 协议数据这里只是作为延时只输入字符串,这个正式的应该是根据协议号显示不同的协议结构,然后根据结构字段分别填写。

相关连接

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PHP技术

Table被web编程弃用的原因

Table要比其它html标记占更多的字节。 (延迟下载时间,占用服务器更多的流量资源。) Tablle会阻挡浏览器渲染引擎的渲染顺序。 (会延迟页面的生成...

2627
来自专栏HaHack

jQuery-based Local Search Engine for Hexo

964
来自专栏更流畅、简洁的软件开发方式

我的网站的后台管理的结构图。

不知道这个能不能放在首页,不行的话我会测下来的。 另外这个算不算是一种架构呢? 欢迎大家多多批评指教! ? 说在前面: 1、 配置文件并不是 web.confi...

2055
来自专栏企鹅号快讯

Bootstrap UI 编辑器

以下是 15 款最好的 Bootstrap 编辑器或者是在线编辑工具。 1. Bootstrap Magic 这是一个 Bootstrap 主题生成器,使用最新...

3535
来自专栏Seebug漏洞平台

Web Worker 中的 importScripts 和 baseHref 同源策略绕过问题

原文链接:http://www.brokenbrowser.com/workers-sop-bypass-importscripts-and-basehref/...

3334
来自专栏老司机的简书

TableView加载图片的优化逻辑

日常中,最常使用的空间非UITableView莫属了。 但是当TableView的cell中包含图片时,使用SDWebImage加载图片虽然是异步过程,但是仍...

753
来自专栏黄Java的地盘

基于React与Redux的留言墙的实现

由于某事业群需要留言墙用于年会,同时需要调用大象公众号服务器接口,所以在今年年初开发了留言墙用于活动现场交流。

761
来自专栏木可大大

微信小程序开发实战

讲解小程序的一些必须要掌握的基础知识,如文件类型、项目结构、配置文件等。部分之前老课程中没有涉及的重要新特性也会在本章节提及

1642
来自专栏依乐祝

如何测量并报告ASP.NET Core Web API请求的响应时间

大家都知道性能是API的流行语。而相应时间则是API性能的一个重要并且可测量的参数。在本文中,我们将了解如何使用代码来测量API的响应时间,然后将响应时间数据返...

491
来自专栏前端儿

pushState、replaceState、onpopstate 实现Ajax页面的前进后退刷新

再通过 onhashchange 事件监听hash锚点的变化,手动进行前进后退操作,浏览器支持度

641

扫码关注云+社区