网络编程
werflychen
曾经在腾讯百度从事过后台开发,现在一个券商从事后台开发,chenwenh@foxmail.com
展开
-
简单UDP聊天模型
<br />下面是自己写的一个UDP的对等聊天模型,将客户端与服务器整合到一起,可以用于在局域网内聊天。<br />基本思想:<br />在主线程中创建一个线程,在一个约定的端口进行绑定,该线程用于接收并打印聊天信息。在主线程中进行聊天输入处理<br /> <br />具体代码如下:<br /> <br /><br />#include "iostream"<br />#include <winsock2.h><br />#include <Windows.h><br />#pragma comment(l原创 2011-03-30 00:22:00 · 883 阅读 · 0 评论 -
epgm在不同镜像的容器中,无法同时绑定地址的问题
问题背景两个不同镜像,记为A,B镜像,A镜像生成两个的容器A1,A2,B镜像生成B1,B2。使用zmq组件的,epgm方式进行通信,需要先进行地址绑定。表示该服务加入某个组播地址,订阅该组播的消息。问题表现:1、直接在A1,A2同时跑这段代码,没有问题。都能成功绑定组播地址。2、直接在B1,B2同时跑这段代码,也是没有问题,都能成功绑定组播地址。原创 2018-01-24 15:48:05 · 533 阅读 · 0 评论 -
zmq 多路复用poll无法收包的问题(朴素的比对法解决问题)
最近项目中使用ZMQ相关的库作为通讯组件,前期用得还算是比较顺利,API使用很简单而且易上手。用了是稳定的4.1.2版本C++版本。 近期忽然发现,一个服务,使用多路复用zmq::poll无法收到包。问题表现: 1)自己的机器上能正常使用poll收到包,没有问题。(自己的机器使用docker镜像环境在跑,代码在git上拉下来) 2)同事的机器上的相同的代码下,无原创 2017-09-22 16:24:57 · 1267 阅读 · 1 评论 -
zmq与libevent集成及丢包问题分析解决
libevent与socket使用事件方式进行编程的思路是:以zmq的订阅端为例子,订阅端与服务端的连接的fd(文件描述符)加入到libevent的监听队列中,并传入自己的回调函数。正常情况下,当有数据来的时候,libevent会调用用户传入的回调函数,在回调函数里面去将数据取出来即可。下面需要解决二个问题:1、如何取得zmq的socket值?使用getsockopt函数获取。原创 2017-07-06 21:35:28 · 2497 阅读 · 3 评论 -
redis在pub压力较大时,sub端错误Server closed the connection的解决方法
订阅端在发送压力较大时,约每秒大于5K左右时,会出现不稳定情况,会退出。Error: Server closed the connectiondispatch...解决:redis在缓冲设置上有一定的限制,可以试一下:查询:client-output-buffer-limit pubsub 0 0 0设置成发送订阅没有限制,使用客户端连上去,命令如下:CONFIG SE原创 2017-05-03 15:37:00 · 6396 阅读 · 0 评论 -
使用valgrind检查内存泄露
因为之前所在公司,写的代码都不允许使用动态分配内存,直接使用静态预先分配方式,所以根本不存在内存泄露的问题。现在新公司里面都原创 2014-07-08 17:35:35 · 1150 阅读 · 0 评论 -
hiredis的一些使用心得
最近公司的一个后台项目使用的cache模块,由于使用的是公司内部开发的一套分布式的系统,系统由于年代比较久远,也已经没有人员进行维护了,出了问题便无人懂得如何维护,也没有相应的文档,便最近想办法使用一个新的cache模块进行替换。 开源的cache服务中,当前属redis比较流行,支持的数据类型也比较丰富,是开源项目中比较成熟的方案,公司内部也有其他团队已经选择了该方案。因此便决原创 2015-03-25 20:17:58 · 10951 阅读 · 0 评论 -
Linux线程私有数据
最近做的一个项目中,有这么个需求,系统中使用多线程技术,每个线程访问redis,希望每个线程来保存对redis的一份长链接,而不是每个请求建立一次链接。如果在线程启动之前建立好链接,然后传到线程的私有数据中,可以实现。可是系统的框架实现,无法传入数据,这时可以采用线程的私有数据技术进行储存和获取。其中,有三个关键的系统API可供调用,分别是:1、pthread_key_create ,创建原创 2015-02-27 18:30:13 · 745 阅读 · 0 评论 -
protobuf嵌套类操作实例
protobuf类进行嵌套时,协议描述如下:/* 客户端拉取消息请求包 */message Secret_Get_Req{required uint32 version = 1;repeated Secret_Msg_Req msg_req_list = 2;}/* 消息请求包封装 */message Secret_Msg_Req{optiona原创 2014-07-15 20:37:15 · 9648 阅读 · 3 评论 -
protobuf进行ParseFromString解包失败的一个常见问题
今天在项目中,使用protobuf进行解包时原创 2014-06-11 16:57:41 · 46927 阅读 · 8 评论 -
libevent使用
这里转载一篇文章,今天去下载了libevent源码,并在其基础上写了个简单的server,使用极其简单,这里转载 2014-07-21 17:12:43 · 874 阅读 · 0 评论 -
linux网络编程中,几个常用API的阻塞与非阻塞调用
阻塞socket和非阻塞socket读操作对于阻塞的socket,当socket的接收缓冲区中没有数据时,read调用会一直阻塞住,直到有数据到来才返回。当socket缓冲区中的数据量小于期望读取的数据量时,返回实际读取的字节数。当sockt的接收缓冲区中的数据大于期望读取的字节数时,读取期望读取的字节数,返回实际读取的长度。对于非阻塞socket而言,socket的接收缓冲区转载 2014-02-26 23:01:58 · 1343 阅读 · 0 评论 -
系统间歇性超时问题的分析与解决
【系统症状】后台系统A平均访问量约13K/min,峰值约30K/min。系统超时时间设置为500ms。系统每隔10分钟左右,会出现几十个请求包的超时。但该超时只持续1~2分钟又会自动恢复,百思不得其解。B系统访问A系统的超时视图如下所示:【寻医问药】请教了身边的几个同事,分析可能原因如下:1、机器跨IDC访问,网络抖动造成。2、依赖的外部接口多,外部接口本身访问比较原创 2013-03-19 20:43:11 · 3926 阅读 · 0 评论 -
GET和POST的区别
今天看到一个文章,讲GET和POST的,讲得非常详细,转一个。转载链接为http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html浅谈HTTP中Get与Post的区别 Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一转载 2012-11-19 23:07:38 · 459 阅读 · 0 评论 -
一个封装好的线程类
<br />转自一个网友的贴,线程封装一个封装好的线程类一.创建线程函数<br /> 常用的创建线程的函数是CreateThread,还有MFC中的AfxBeginThread方法.另一种函数是_beginthreadex,<br />其实它在内部调用了CreateThread,在调用之前_beginthreadex做了很多的工作,从而使得它比CreateThread更<br />安全.所以一般使用_beginthreadex来创建线程.于是以下使用_beginthreadex函数来创建线程类.<b转载 2011-04-11 15:15:00 · 2682 阅读 · 0 评论 -
tcp挥手时的异常情况(SIGPIPE、shutdown vs close操作)
正常的TCP端的四次挥手问题1:如果只是关闭了一端,另一端还能发数据么我们知道,TCP是一个双全工协议,从协议层面,我们了解到,如果client发了FIN包给服务端,在收到ACK之后,状态切换成FIN_WAIT2。此时,从协议层面,只是关闭了client->server这个方向的数据传输。而server->client端,则可以继续往client端发数据。可以参考《tcp/ip详...原创 2019-02-20 10:25:24 · 821 阅读 · 0 评论