共计 6 篇文章

2:C1000K 实战,基于 Libev

最近公司年终旅游,博客也是有很久没有更新了,这次继续我们上一次的高并发服务器编程。 上一篇文章讲解了要在Linux系统上实现C1000K服务器所需要进行的系统调优操作,那么我们现在就开始来编写我们的程序吧~ #include <arpa/inet.h> #include <ev.h> #include <stdlib.h> #include <stdio.h> ...

1:C1000K 实战,基于 Libev

最近公司接到一个新项目,是基于Socket通信的GPS实时记录系统。实际设备台数是在20W左右,但是自己并没有对实时性要求这么高的高并发服务器软件设计经验,只能硬着头皮先进行测试开发试一下。 技术选型的话,当时是直接想使用Windows下面的IOCP,因为自己对C#这块比较熟悉,不过经过测试,在WindowsServer上面的测试结果并不理想,可能是自己水平不到家吧(笑)。关于高性能的IOCP编程大家可以参考这位仁兄的文章,写得很不错,而且也有实例:(C#高性能大容量SOCKET并发(一):IOCP完成端口例子介绍) 之后查阅了相关的技术资料和各类博客,发现Linux更适合做此类系统,所以选择了CentOS 7.x 64bit作为开发系统, ...

C# 动态缓冲区的实现

在网络编程的开发环境当中经常会使用缓冲区来进行数据的接收与发送,但是当我们需要发一段连续的数据的时候,使用 byte[] _buffer= new byte[lenght]; 显然很死板,我们需要一个更加“智能”的缓冲区来管理这些数据。 ok,我们可以编写一个动态缓冲区管理器,它在内部维护一个byte[]类型的缓冲区,还有一个数据指针,以及已使用的字节空间的计数。 class DynamicBufferManager { public int DataCount {get;private set; ...

再谈C#与C++通信之编码

在博客的这篇文章当中忽略了对中文字符串的处理.例如以下代码: string str = "我a"; return str.Lenght; 以上代码会返回2,乍一看似乎是没有错的,我们数据包head的lenght会被置为2. 然后我们的对端C++服务器会读取两字节的数据来,最后的结果会出现截断的情况,这是为什么呢? 因为在UTF-8里面我们汉字是占用的3字节空间,str的长度实际为4,所以我们在C#客户端发送数据的时候应该这样来获取字符长度. public static int getLenght(string ...

C# 结构体与byte[]之间的转换,以及C#与C/C++服务器之间的通信

说起结构体与byte[]之间的转换,主要是为了能够让结构体通过socket进行传输,实现通信。 首先我们来看看C下面的一个结构体: #prgrma pack(1) struct pack { uint8_t type; uint32_t lenght; } #prgrma pack() 这里我们需要字节对齐,以保证两个平台之间数据传输的正确性。 [Serializable] [StructLayout(LayoutKind.Sequential,Pack=1) ...