gocpplua 发布的文章

文章教你如何将某个网址保存为Internet快捷方式,按照下面步骤就行:

  1. 桌面上右键 然后创建一个快捷方式
    1.png
  2. 输入相关的链接地址:www.gocpplua.com
    2.png
  3. 输入快捷方式后点击完成
    3.png
  4. 接着就会看到快捷方式
    4.png

码字不易,如果解决了你的问题的话,欢迎打赏:
pay.png

通过上一篇文章《使用mongoose实现本地http服务器》,我们可以通过下载文章中源码,进行尝试编译运行,就可以基本了解mongoose。
本篇文章主要使用mongoose实现现restful server:

  1. 将客户端上传的两个数字相加,并且返回相加后的值
  2. 将客户端上传的字符串进行打印

核心代码代码如下:
1.png
上图中红色比较是我根据官方源码链接自己新增的。我的源码下载地址:链接

大家下载后编译运行(我是使用VS2017),如下图:
2.png
接着我们使用postman来模拟客户端发送http消息:
3.png

我们接着查看服务端日志:
4.png

客户端postman收到结果:
5.png

我们可以看到,首先是创建了一个http连接,然后收到http请求。这里有一个疑惑,在我印象中,http请求默认是短连接,那为什么服务端日志中没有看到断开http请求的打印:"MG_EV_CLOSE"。当我们关闭postman时,才出现"MG_EV_CLOSE"。经过一番追踪,终于发现问题了。
postman工具可以把请求参数生成对应的代码(划重点),见下图:
6.png

我们可以看到,postman发送的http请求是:HTTP/1.1起。接着我们查看HTTP/1.0和HTTP/1.1。

在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。

而从HTTP/1.1起,默认使用长连接,用以保持连接特性。

问题得到很好的解答,有兴趣的朋友可以通过关键字搜索下:http 短连接 长连接。
同理,我们可以通过postman验证接口:http://127.0.0.1:8000/printcontent,此处就不再进行阐述,如有问题请留言。

码字不易,如果解决了你的问题的话,欢迎打赏:
pay.png

对于Typecho有人说:Typecho 浑身都透着她简洁的性格,就像一个苗条的美女那样吸引着你。

对于Typecho有人说:追求完美的用户体验,关注信息无障碍,在普及和推广 Web 无障碍观念和意识方面,Typecho 会做的更好。

对于Typecho也有人说:正如 Typecho 的初衷和正在做的一样,让我们通过打字来表达自己的平台,做得不多,但足够好,这就足够了。

但是我想说:Typecho简洁得太过份了,竟然连博客的“友情链接”,这个最基本的功能都没,难道以后我每添加个友情链接都需要自己去编辑博客主题文件。 我想说,这个真的可以有!!!!

首先我们先登陆后台,然后点击“控制台” -> “外观”,接着选择“编辑当前外观”,然后选中“sidebar.php”。
1.png

接着我们进行选择找到下述位置:
2.png

然后加上如下代码:
3.png

添加完成后,我们就可以点击链接访问好友"超人小芳博客"了。
4.png

码字不易,如果解决了你的问题的话,欢迎打赏:
pay.png

注意:这里是使用mongoose实现HTTP服务,非数据库使用。
项目中需要实现一个http service的功能。在同事的推荐下选择了mongoose的代码。

Mongoose是一个用C编写的网络库。它为客户端和服务器模式实现TCP,UDP,HTTP,WebSocket,CoAP,MQTT的事件驱动的非阻塞API。

mongoose的代码着实轻量,先看看它的特点:

  1. 在整个的实现是使用C语言编写
  2. 整个代码也只有一个mongoose.c和mongoose.h两个文件, 从引入第三方的考虑上也着实不多。
  3. 实现的功能还是非常多的,从使用的层面上来说功能还是比较全面。只不过不知道是否是为了第三方使用的方便还是怎么地,它的代码只用了两个源文件罢了。诸多的功能也大以宏的开始与结束来区分。
  4. 示例非常齐全,所有的功能都有单独的示例:链接

mongoose github路径如下:链接

接下来我们直接从代码入手:
1.png

源码下载地址:链接

大家下载后编译运行(我是使用VS2017),如下图:
2.png

然后我们就可以在浏览器中输入对应的地址,这边特别需要注意的是端口号,我默认使用:8000!
3.png

码字不易,如果解决了你的问题的话,欢迎打赏:
pay.png

在看C++11的时候,一直很迷惑,为什么C++已经存在引用(&),现在在C++11中又有一个std::ref,感觉和引用也差不多。
在查找部分资料以后,发现C++11部分新特性中存在一些限制,例如:

  • 若需要传递引用参数给线程函数,则必须包装它(例如用 std::ref 或 std::cref )
  • bind 的参数被复制或移动,而且决不按引用传递,除非包装于 std::ref 或 std::cref
  • 不仅仅以上

接着我看着写关于std::reference_wrapper:

std::reference_wrapper 是包装引用于可复制、可赋值对象的类模板。它常用作将容器存储入无法正常保有引用的标准容器(类似 std::vector )的机制。特别是, std::reference_wrapper 是围绕到类型 T 的对象引用或函数引用的可复制构造 (CopyConstructible) 且可复制赋值 (CopyAssignable) 的包装器。 std::reference_wrapper 的实例是对象(它们可被复制或存储于容器),但它们能隐式转换成 T& ,故能以之为以引用接收底层类型的函数的参数。

若存储的引用可调用 (Callable) ,则可以相同参数调用 std::reference_wrapper 。辅助函数 std::ref 与 std::cref 常用于生成 std::reference_wrapper 对象。std::reference_wrapper 亦用于按引用传递对象给 std::bind 或 std::thread 的构造函数。保证 std::reference_wrapper 可平凡复制(TriviallyCopyable) 。(C++17 起)

接下来我们看几个官方的例子:

  1. thread
    1.png
  2. vector
    2.png
  3. bind
    3.png

码字不易,如果解决了你的问题的话,欢迎打赏:
pay.png