神奇的Java

工作碰到的一个问题,分享一下解决方案。

使用java开发一个socket服务器,使用protocol buffer作为和客户端通信的数据格式。然后,问题就来了,这个socket服务器要如何调试?换句话说,服务器上的程序要怎么样才能跑出实际的效果。

如果开发的是一个web服务器,那么借助浏览器就能运行服务器上的程序,如果是get请求类型的程序,在浏览器地址栏里输入服务的地址,按回车即可;如果是post请求类型程序,使用postman之类的chrome插件亦能轻松完成任务。

如果开发的是一个纯粹的socket服务器,也有众多软件可以模拟客户端向服务器发送数据,如sokit。

如果客户端和服务器使用json作为通信的数据格式,那么也很好办, json是一串可视化的字符串,可以轻而易举的构造出来。

然而,protocol buffer格式的数据并不容易构造,它是一种特定格式的二进制数据,没有办法通过键盘键入字符构造出来,也没有办法通过将字符串经过通用的算法加工构造出来,要构造出protocol buffer数据要使用特定的协议文件和复杂的工序,不存在一个拿来即用的通用调试工具。

要执行利用protocol buffer作为数据传输格式的服务器需要编写特定的代码,与服务器对应的客户端就具有这个能力。可是客户端和服务器是由不同的人开发的,如果我在服务器上每开发一个功能都需要客户端的同事帮忙调试,这效率也太低了,做web开发都有前后端分离的概念,未必游戏开发就没有了。

所以我需要自己模拟一个客户端来和服务器通信。

可开发一个这样客户端工作量太大,因为我们的服务器核心通信部分完完全全一行一行代码写出来的,协议是定制的,这也就意味编写的客户端要和服务器交互也需要实现这套协议,虽然有现成的代码可以参照,要完成任务还是异常困难。

完成这项工作的唯一捷径是复用服务器的代码,我原本打算用c# + wpf做这件事,开发windows客户端这两种技术是首选,可重复实现轮子是个问题。这个时候java的跨平台的威力就显现出来了, java也可以开发windows客户端程序,此外他还有一项优势,可以复用服务器端的java代码和jar包,然后我直接将服务器端的协议实现代码和ptotocol buffer数据结构定义代码拷贝到客户端项目里,流程就直接跑通了,问题迎刃而解。java虽然又老又丑,但不得不承认,姜还是老的辣。

另外用java做客户端程序还有一个牛逼的框架,JavaFx。它使用xml 作为界面布局文件,当然,这个不稀奇,现在众多流行的客户端开发技术都用xml布局页面。然而,神奇的是,它还可以使用css设置界面样式,这个就逆天了,它让开发客户端程序和开发web一样容易。

这使得我无门槛毫不费力第一次就轻松的完成了一个不算太丑的java windows 客户端程序开发

这个客户端会将模拟用的json数据转换成protocol buffer数据并使用特定的协议发送给服务器,服务器上的程序便能运行,原本这个过程的的实现需要客户端开发的同事的帮助才能完成,所以它为我简化了开发过程,提升了工作效率。当前,我可以自己开发调试服务器,除了联调时刻,其余任何时候都不用依赖客户端。

java这玩意,虽然年纪大,长得不好看,有时候还有点笨手笨脚,可解决问题的关键能力还是要比那些长得好看的小鲜肉编程技术可靠的多。

原文发布于微信公众号 - 带你撸出一手好代码(gh_afab56b37671)

原文发表时间:2018-07-31

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java后端技术栈

面试必备:如何将一个长URL转换为一个短URL?

前几天整理面试题的时候,有一道试题是《如何将一个很长的URL转换为一个短的URL,并实现他们之间的相互转换?》,现在想起来这是一个绝对不简单的问题,需要考虑很多...

4192
来自专栏Linyb极客之路

API设计:先思考再编码

1303
来自专栏后端技术探索

另一篇mysql防止库存超卖

今天王总又给我们上了一课,其实MySQL处理高并发,防止库存超卖的问题,在去年的时候,王总已经提过;但是很可惜,即使当时大家都听懂了,但是在现实开发中,还是没这...

1551
来自专栏杨龙飞前端

angular的一些思考

这套系统做的做的目的是实现所有的功能可配置化,使用MVC模型,有model层,view层,和controller层,model层的数据会注入到controlle...

922
来自专栏码代码的陈同学

Spring Cloud 网关异常处理实践

有余力可以自建异常处理平台,有一套异常处理流程,有个炫酷且实用的Dashboard。

69820
来自专栏数据的力量

怎样快速搜索自己所需的资料?

1132
来自专栏技术之路

Eclipse智能提示

想利用业余时间学习一下java 装好sdk和Eclipse 后写个小程序 发现它的智能提示真不敢恭维 要按  alt+/  才能出来 但是感觉一个好不ide不能...

2569
来自专栏二次元

正式开启全站HTTPS加密之旅

2、微语不见了 当初emlog弄上微语的时候我就感觉那是多此一举了,弄的很粗糙,但等到大家都熟悉了之后,又去掉了,未免有点。。。 其实这也能用第三方插件...

1280
来自专栏FreeBuf

Any.Run交互式恶意软件分析沙盒服务现向公众免费开放

近日,名为Any.Run的交互式恶意软件分析沙盒服务宣布,其免费社区版本正式向公众开放。这样一来任何人只需简单的注册一个账号,就可以使用该平台实时的对某个特定文...

3956
来自专栏IT米粉

Redis常见的应用场景解析

Redis是一个key-value存储系统,现在在各种系统中的使用越来越多,大部分情况下是因为其高性能的特性,被当做缓存使用,这里介绍下Redis经常遇到的使用...

3816

扫码关注云+社区

领取腾讯云代金券