服务器端程序无法登录分析

由于实际需要把用户数据中的一个属性值限制范围扩大,仔细看了代码只需要修改宏定义的值,然后重新编译替换到线上即可。结果替换了新版本后,使用管理员工具竟然无法登录,但是线上在服务启动后其他玩家又可以正常登录,大概有一百多人左右。替换成旧的版本,用管理员工具居然又可以登录了,这种理论上根本说不通,很是费解,又回头仔细看了代码,还是觉得不可能是这次修改代码引起的,因为只是修改了一个宏定义的值,其他任何地方都没有修改过。

再次替换成新版本,服务器启动后,一百多玩家正常登录,管理员工具还是无法登录,管理员工具和普通玩家的登录在底层没有任何区别,很是诡异。还是觉得不是新版本的问题,过了一会再次替换成旧版本,这次使用管理员工具也不能登录了,服务器启动后还是有一百多玩家登录上线,同时也有其他玩家反馈无法登录,到这里可以确定不是管理员工具的问题,也不是新版本程序的问题。
阅读剩余部分 –

服务器端程序崩溃分析

写了一个简单的服务器端程序,用于校验用户及下发一些重要数据,用在自己的小软件上运行了好几年一直都很稳定。以前同事写的一个小软件也要用到账号校验及下发数据,给他搭了一套,最初还比较稳定,没怎么出问题,后来时不时的就会崩溃,然后增加了守护进程,当崩溃时自动重启,增加了崩溃时写dump文件。从其中一次崩溃的dump文件中分析是传给数据加密函数的秘钥无效了,此参数从上到下都是引用传递,那唯一可能的是保存此秘钥的用户数据被释放了,结合实际的使用场景,存在大量短时间顶掉已登录账号再次登录的情况,可以确定问题就在这里,前面一次登录完成,正在准备下发数据,结果被后面一次登录给顶掉了,把用户数据释放掉了,导致准备下发数据时的加密函数使用的秘钥参数被释放了,然后程序崩溃。
阅读剩余部分 –

关于打开多个USB摄像头的问题

  1. USB带宽由USB控制器决定;
  2. 电脑上不是每个USB口都独享一个USB控制器,可能多个USB口共用一个USB控制器;
  3. 共用一个USB控制器的所有USB口共用此USB控制器的带宽;
  4. USB2.0的设备由USB2.0驱动分配带宽,即使是接在USB3.0的口上;
  5. 台式机可以通过PCI-E的USB扩展卡来扩展出更多的USB口;
  6. 带有扩展坞接口的笔记本电脑可以通过扩展坞扩展更多的USB口;
  7. 使用USB HUB可以扩展多个USB口,但是无法扩展USB的带宽,仍然无法打开更多的USB摄像头;
  8. 带有雷电3接口的笔记本应该是可以通过雷电3接口扩展出更多的USB口(未测试);
  9. 可以尝试在USB3.0口上接USB3.0 HUB,使用USB3.0的摄像头(未测试);
  10. USB HUB需要外接电源型,防止供电不足;
  11. USB HUB需要购买质量较好的,测试过一个型号的几个外接电源USB3.0 HUB,有的口不能稳定拷贝数据,有的口不能识别2.0的设备,没有一个全部功能都好用的;
  12. 测试了belkin的USB3.0 HUB,非常稳定,价格较贵但好用。

基于Miniblink的WebBrowser控件CXMBWebCtrl

由于网站开启HTTPS导致客户端使用Windows的WebBrowser控件在XP系统下无法显示页面,查阅了浏览器内核相关资料后选择了开源小巧的Miniblink(官方主页https://weolar.github.io/miniblink)。

基于Miniblink封装了一个WebBrowser控件CXMBWebCtrl,基于控件CXMBWebCtrl写了一个简单的浏览器Demo,Demo代码下载地址:https://download.csdn.net/download/werocpp/11127189。

使用过程中遇到一些问题,记录如下:

  1. 作为MFC对话框子控件使用时接收不到键盘消息,这个只需要在控件的窗口处理过程函数中处理消息WM_GETDLGCODE即可;
  2. 超链接在新窗口中打开事件中有些URL获取不到,对于这种情况只能在本进程内打开此页面;
  3. 网页超链接启动本地应用程序,需要自己在回调函数中实现;
  4. 网页超链接下载文件需要自己实现,这里没有实现;
  5. cookies及localstoreage最好使用进程ID进行拼接存放路径,这里代码没有进行修改;
  6. wkeInitialize只需要调用一次,wkeFinalize不需要调用,这里代码没有进行修改;

控件类CXMBWebCtrl头文件如下:
阅读剩余部分 –

读《架构整洁之道》

总结:此书可读。

初读第一遍时觉得内容泛泛,没有吸收到什么东西。第二遍细读时,才有些了解了自己认为的“架构”和作者论述的架构之间的区别,纠正了许多原有错误的认知。

很多时候写代码,都是凭借以往的经验在脑袋中构建出一个大致的结构,按这种结构去实现各个模块,最后组装成一个整体。只是根据以往的经验认为这样可行,具体为什么可行说不上来,很多东西都可以在此书找到理论依据。

本书精华应当是整洁架构那章,围绕业务核心逻辑以及用例分层构建整个系统,内层独立于外层,外层依赖内层,外层以插件形式接入系统。

阅读剩余部分 –

读《代码整洁之道 – 程序员的职业素养》

总结:不推荐购买,浏览完下面各章节的要点即可,书中仅是对各个要点进行展开论述或列举小故事进行论证。

书中内容大体可分为两种,一种是自己可控,一种是与他人协作沟通。与他人沟通协作部分仅供参考,国外作者举证的事例,国内环境不一定适用。自己可控部分主要有以下几点:

  1. 提交经过充分自测的代码;
  2. 随时重构,确保代码结构整洁灵活可扩展;
  3. 持续学习,广泛涉猎;

阅读剩余部分 –

libcurl easy API使用流程及OpenSSL注意事项

一、基本使用流程

  1. 全局初始化,curl_global_init();
  2. 申请句柄,pcurl = curl_easy_init();
  3. 设置参数,curl_easy_setopt(pcurl,  …,  …);
  4. 执行请求,curl_easy_perform(pcurl);
  5. 释放句柄,curl_easy_cleanup(pcurl);
  6. 全局释放,curl_global_cleanup();

阅读剩余部分 –

分类目录

文章归档