非常高兴来的电鸭社区,让我有找到了当年 BBS的时代感觉,天涯没了,百度贴吧乱糟糟,希望这里百年长青!
要说我的开发经历,80%因为个人爱好,1999年刚毕业进入中国联通做机务员,就是看机房,当时其实用不到我们做什么开发之类的,都有第三方公司做技术支持,我们就是维护,但是看到这么多电脑、服务器,都是我上大学的时候传说中的存在,所以一颗躁动的心就开始鼓捣。
当时最想干的就是开发一款游戏,类似红警、盟军敢死队之类的,太傻太天真,以为自己的很厉害,竟然不知道有游戏引擎这东西,就用c++和 dx8开始搞,搞了半年,弄出一个8方位行走和A-star寻址就干不下去了。
不知道有没有人了解https://www.gameres.com/ 这个论坛,当年发了一个关于游戏开发的帖子,已经过去20多年了,记忆犹新。
后来本人从吉林到北京发展,从事音视频集成。但是主要是做项目,主要是科技馆、展馆内的视觉和交互开发。用的都是投影机,例如用3台投影机 无缝拼接后 打出120度的一个画面。还有一些大屏幕交互,基本上就是人体动作捕捉,比如可以在一块3米*6米的玻璃上打出画面,然后人可以跟画面互动。但是也有很多案例,至今还保存着很多视频,感兴趣的朋友可以联系我。
这么多年,基本上市面上常见的编程语言都接触过,上大学的时候 用C语言写了一个能对付玩的俄罗斯方块,这个迭代了2次之后,C语言就从入门到精通了。
毕业后发现 VB6是真好用,做数据库,可视化编程,感觉当时C语言一下子不香了,搞好几个月也弄不出的东西,人家轻轻拖拽就搞定了。直达弄了半年的C++和DX8,当时就一个想法C++是王道。
然后接触网站开发,因为当时接触的都是微软生态,直接搞ASP,后来弄.Net,搞了几年,做了几个跨境电商的平台。
2016年左右吧,父母年龄也大了,自己感觉钱也赚差不多了(小富即安),就回老家了。老家这边也没什么高科技企业,基本上就处在无业状态,大部分时间是打游戏。
直到2019年,觉得无聊,就可以了解一些新技术。发现了有一家叫Deepin的公司,开发了一套国产化的 linux 图形操作系统,然后就下载安装,试用了一下。结果发现他的图形界面始终存在一些小bug,让人如鲠在喉,但是底层linux 确实真的好用。于是就开始研究 linux服务器,用的版本是ubuntu 18,结果是已发不可收,用了大概半年的时间,基本上linux 服务器的部署、数据库、即时通讯之类的都通了。
接触linux之后,我发现在微软的生态里面混了这么久,真是浪费时间,winNT、SQLServer
.net之类的,太坑爹了,不论是在学习上还是技术上,还是性能上,都不是一个级别的,只有在linux server上写代码,才能让我找到当年 写c\c++的感觉。
正是这个阶段,老家的一个多年的朋友发迹了,干的是农业物联网项目,之前都是采购第三方的软硬件,觉得特别贵,就问我能不能做研发,因为我当时对物联网硬件接触不多,所以也没敢答应,但是多年的朋友,说了好几次,给的工资、待遇在我们本地来说都上相当不错了。但我我怕别人说我靠关系混饭吃,所以朋友叫我去见他的另外两个合伙人的时候,我就说,给我一年时间,我要是能把整个技术栈搞通,我就干,如果搞不出来我就走,这年给生活费就行。
就这样,我这一年主要是上网找各自板子,DTU、继电器、传感器之类的,然后想办法把他们连接起来,连接到我的tcp/ip服务器上去。这期间最大的坑应该是消息队列。最开始好不容易把DTU透传Modbus搞定了,单台设备远程控制、异步数据处理还可以,后来为了验证服务的稳定性,就同时搞了20套设备测试,结果原形毕露,20套设备的数据就会引起网络堵塞、丢包等。最后想出办法,用redis 做了一个 设备连接映射和消息队列,完美解决。看着1、2个月都不需要重启的服务器,心里及其敞亮。
还有一个坑是硬件的问题,困扰了我1个月的时间。当时是在网上弄了一个可以测量电路负载电流、电压的板子,当我把它与DTU和一个继电器集成在一起的时候,发现单独给电路测量的板子供电就正常,跟其他设备的同一个电源就不正常。因为对硬件知之甚少,一直搞不清楚是什么问题。知道有一天,我听说有一个叫电源隔离的名词,就上网花1.5原弄了几个,结果放上去就搞定,一个多月的脑细胞,就这么1.5元的事情。
到现在为止,我的物联网、数据中心已经在我们本省交付了6个项目,都是各县市农业农村局的政府项目。
2024年末吧,开始觉得DTU这玩意 数据透传有点过于简单,比如每小时上报一次温湿度,服务器存储的是每小时这个节点的数据,如果计算某天的平均值,应该有些不准确。理想的做法是在物联网设备端做一个计算,每一分钟采集一次温湿度,每一小时将这60次的数据进行取平均值,然后再上报服务器,那么服务器仅需要存储24条数据,就可以计算当天按分钟计算的平均值了。
在这个想法的驱使下,我弄了一块安卓开发板,开始做嵌入式开发,竟然轻松入手,用了大概一个月时间,已经初见成效。顺便还给北京的一个客户开发了一套污水沉降光学检测和自动采样的物联网设备端的控制系统,完美交付。
这么多年的开发经验我总结出几条经验,跟朋友们共勉:
1、C\C++是一切开发的基础,虽然最开始你可能无法用它来做项目,但是如果把这个学透,你会发现,所有的编程语言,都是他的扩展,包括但不限于C#、java、php、python、kotlin等等,如果你的C\C++没问题,学习这些会非常简单。
2、如果你发现学习一个第三方框架的时间,不如自己写一套类似的东西,那就自己动手,写一套更加简洁、更加有针对性的东西,会让你的项目如虎添翼。比如当初做前端的时候,大部分推荐是.vue.js,但是我学了几天,发现各种思维的不适应,因为这个的思维方式和C++的传统思维完全不一样了,学不下去,就自己写,我用了大概2个月时间,用原生java script自己写了一套前端UI框架,功能可能没有那么强大,但是我自己觉得够用,更重要的是代码量极少,符合我一直改变不了的面向对象思维。感兴趣的朋友可以品鉴一下:https://open.winnto.com/resource/wangui1.0.js
3、要有架构师思维,事无巨细、做好规划。这个就好比盖房子,如果让初学者搞一个3间瓦房,可能是没有问题的。但是让你改一个3层别墅,初学者就会有很多地方想不到,比如水、电都怎么走最合理。如果是一个高层建筑呢,如果是一个小区、甚至一个大型社区能,地上、地下、强电、弱点、安防、监控、智能化等待,都需要有详细的规划才能动手,否则项目就会越做越乱,代码就会变成一坨屎山。
好了,初来咋到,露个脸,希望认识更多的朋友,多多交流,如果有项目能个合作,那就更好了!
最后修改于
“原生js或者vue最终都是v8引擎能够解析” 这个说明你对底层知识的缺乏,Vue 的代码需要被转换成原生 JavaScript,最终由 V8 引擎执行,Vue 本身不直接与 V8 交互,而是通过 JavaScript 间接依赖 V8。这种关系和其他的框架类似,就是这种层层叠加的东西,让你无法理解底层基础性的架构,你一直提到MQTT,这个协议底层本质上就是 TCP/IP,如果在业务逻辑上能够处理好,不论是性能还是稳定性上,TCP/IP具有绝对的优势。
我们可以站在巨人的肩膀上,但是你不能看不清巨人的基础是什么,尤其是不能因为有了巨人的托举,自己就变成一个等人投喂的工具人,而是要想办法让自己成为巨人,正所谓基础不牢、地动山摇。
我也用第三方架构,但是在我的能力和经历允许的情况下,我尽量不用,做到依赖最小化。
“原生js或者vue最终都是v8引擎能够解析” 这句不是你的原文么?前端也不不止js html css?吧,还有win桌面的 C#、QT的C++、安卓的kotlin,这些都是生态的平台性质的东西,我本人的能力绕不过去,所以就选择用好它。
但是你说的 这些框架,完全都是在这些生态上层层加码出来的,本来可以用最直接简单的办法解决问题,为什么要用这些框架呢?尤其是你说自己干了10年了,还看不透这个本质问题。
这是我写的web前端框架,https://open.winnto.com/resource/wangui1.0.js,已经用了3年多了
虽然很佩服用C/C++写服务端的大佬,但C/C++太难了,
直接用C/C++写tcp服务端,不是很建议啊。
为了验证服务的稳定性,就同时搞了20套设备测试。
好小众的方法啊,如果要测试2万个终端,你们也搞2w套设备?
结果原形毕露,20套设备的数据就会引起网络堵塞、丢包等。
这就是不建议使用C/C++的原因了,20套设备, 就算每台每秒上报10条数据,
服务端每秒也才200条数据,没什么压力啊。
关于物联网、redis、mqtt
虽然redis也能充当消息队列,但在物联网方面明显有比redis更优的选择,那就是mqtt。
很多终端设备都会自带mqtt协议客户端,它们会直连mqtt的中间件。
我们要的就是写一个mq的消费者就够了。不用自己写tcp服务端。
这样就算2w个终端,也能消费得了。
1、我后来是写了一个模拟客户端链接的模块,同时搞了 3000多 链接(我的测试服务器连接池的最大容量),至于20套设备,是因为当时集成的硬件也需要测试。
2、20套设备不是数据堵塞不是因 数据上报的过程,当我的做了一个同时开关继电器的功能,就是一键点亮、关闭20盏灯,这个过程指令同时发出,状态数据同时返回,在没有消息队列的情况下就会堵塞、丢包。
3、mqtt在本质上还是依赖tcp/ip的数据传输,如果在逻辑控制上做好,tcp/ip本身完全能够实现mqtt的效果,并且性能上具有绝对优势。
这些都是项目研发前期遇到的问题,目前我的平台已经稳定运行超过3年,并且已经交付7个政府项目
Linux下C++写tcp服务还是可以的,比windows用完型端口简单,容易写,很多老C++开发都会手搓一套网络库,但是现在需要各种协议扩展了,确实不建议手搓了,专业的事情专业的人做,用C++开源库就挺好,前些年有个国人开源的库,在techempower.com霸榜了很多年,支持非常方便的http,websocket扩展,后来不参与排名了。自己手搓的前期和固定场景可以,但是后期随着客户越来越复杂,现成的框架优势就逐渐起来了。
是的,我现在也转Java了
可以联系
请问儿童电话手表二开能搞定吗,比如在原软硬件基础上增加温度传感器?
如果是已经成品的东西,基本上没啥希望,要在原有的板子上加传感器比较难,而且外壳什么的都要重新设计。可以考虑重新打板,开发,相当于自己重新做一套。
可以详细聊聊