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 条评论
登录 后参与评论

相关文章

来自专栏Android干货园

Android JS相互调用详解

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/49...

501
来自专栏finleyMa

jsonp总结

由于浏览器有同略策略,但是<script>标签的src可以跨域,利用这个"漏洞"搞事,具体做法是: 服务端地址(比如 http://api.xxx.com/j...

422
来自专栏技术博客

Entity Framework CodeFirst数据迁移

我们知道无论是“Database First”还是“Model First”当模型发生改变了都可以通过Visual Studio设计视图进行更新,那么对于Cod...

753
来自专栏恰同学骚年

ASP.Net WebForm温故知新学习笔记:一、aspx与服务器控件探秘

开篇:毫无疑问,ASP.Net WebForm是微软推出的一个跨时代的Web开发模式,它将WinForm开发模式的快捷便利的优点移植到了Web开发上,我们只要学...

462
来自专栏向治洪

Service Worker初体验

概述 在讲Service Worker之前先说一下另一个概念:PWA(Progressive Web Apps) Progressive Web App:是...

21910
来自专栏PhpZendo

HTML 5 Web Workers 的基本信息

要将有趣的应用(例如从侧重服务器端的实施)移植到客户端 JavaScript,存在很多制约瓶颈。其中包括浏览器兼容性、静态类型、可访问性和性能。幸运的是,随着浏...

351
来自专栏Urahara Blog

CVE-2018-1270&CVE-2018-1275 spring-messaging远程代码执行漏洞分析

1363
来自专栏Ryan Miao

Java Web基础入门

前言 语言都是相通的,只要搞清楚概念后就可以编写代码了。而概念是需要学习成本的。 Java基础 不用看《编程思想》,基础语法看 http://www.runo...

2297
来自专栏Java面试通关手册

从分析我抓取的60w知乎网民来学习如何在SSM项目中使用Echarts

去年在接触Java爬虫的时候,接触到了一个关于知乎的爬虫。个人觉得写的非常好,当时抓取的效率和成功率还是特别特别高,现在可能知乎反扒做的更好,这个开源知乎爬虫没...

1023
来自专栏菩提树下的杨过

mybatis 3.2.7 与 spring mvc 3.x、logback整合

github上有一个Mybatis-Spring的项目,专门用于辅助完成mybatis与spring的整合,大大简化了整合难度,使用步骤: 准备工作: mave...

2098

扫描关注云+社区