------------------ 前言 ------------------ 发了第一篇文章后,有不少同志留言,看来socket编程仍然是软件系统里面一个比较难的部分. 第一篇文章主要介绍了传输协议的设计,这个是整个socket框架最底层基础的部分,接下来整个socket服务器大楼都将在这个协议设计基础上不断搭建出来. 这篇文章我主要接上文提出的服务器各个性能参数给出解决思路. ------------------- socket服务端接收模块设计  -------------------…
------------------ 前言 ------------------ 开发了这么多年,发现最困难的程序开发就是通讯系统. 其他大部分系统,例如CRM/CMS/权限框架/MIS之类的,无论怎么复杂,基本上都能够本地代码本地调试,性能也不太重要.(也许这个就是.net的企业级开发的战略吧) 可是来到通讯系统,一切变得困难复杂.原因实在太多了,如: 性能永远是第一位:有时候一个if判断都要考虑性能,毕竟要损耗一个CPU指令,而在通讯系统服务器,每秒钟都产生上百万级别的通讯量,这样一个if就…
转载:http://www.cnblogs.com/zc22/archive/2010/06/27/1766007.html ------------------ 前言 ------------------ 开发了这么多年,发现最困难的程序开发就是通讯系统. 其他大部分系统,例如CRM/CMS/权限框架/MIS之类的,无论怎么复杂,基本上都能够本地代码本地调试,性能也不太重要.(也许这个就是.net的企业级开发的战略吧) 可是来到通讯系统,一切变得困难复杂.原因实在太多了,如: 性能永远是第一位…
简单的c# TCP通讯(TcpListener) C# 的TCP Socket (同步方式) C# 的TCP Socket (异步方式) C# 的tcp Socket设置自定义超时时间 C# TCP socket发送大数据包时,接收端和发送端数据不一致 服务端接收Receive不完全 tcp Socket的超时时间默认20多秒,而实际连上不需1秒时间,20多秒是无法接受的. IPEndPoint ipep = new IPEndPoint(ip, port);//IP和端口 Socket soc…
前言 tcp的包的格式可以看我以前的计算机网络整理,下面这些周边只是为了开发时候我们能用到一些理论知识. 正文 首先要介绍的就是域名,为啥有域名这东西呢?单纯站在网络的角度上讲这属于应用层的东西了. 如果站在万物互联的角度上讲,把互联网看做是一台大型电脑的话,那么域名就相当于句柄了. 句柄这东西解释一下,句柄(Handle)是一个是用来标识对象或者项目的标识符,可以用来描述窗体.文件等,值得注意的是句柄不能是常量. Windows之所以要设立句柄,根本上源于内存管理机制的问题,即虚拟地址.简而言…
免责声明:和往常一样,此文章的观点都属于‘No Bugs’Hare(译注:一个网站) ,也许不一定和翻译者或者Overload编辑的意见一致.同时,翻译者从Lapine翻译到英语也具有一定的难度.除此之外,翻译者与Overload对于从阅读此文章所带来的后果或不作为明确不负任何责任. 原文地址:Once Again on TCP vs UDP 讨论TCP与UDP的好与坏几乎与Linux和windows的争辩有着一样长的历史.我一直支持一个观点,也就是:UDP与TCP都有各自的适用场景(比如:[N…
Java作为一种强类型语言,意味着每一个变量都会有特定的类型,Java共有8种基本类型,其中有4种整型(byte.short.int.long).两种浮点型(float.double).1种字符型(char)和一种布尔型(boolean),值得注意的是,虽然字符串String非常常用,但是它却不属于基本类型. 一.整型 整型在表示没有小数部分的数值,允许负数(Java中没有无符号类型,即unsigned),计算机中的存储信息的最小单位是位(bit),存储容量的基本计量单位是字节(Byte),一个…
前言 本文介绍一些tcp的例子,然后不断完善一下. 正文 服务端: // See https://aka.ms/new-console-template for more information using System.Net; using System.Net.Sockets; var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); var ipAddress = IP…
前面主要介绍了AVL的基本概念与结构,下面开始详细介绍AVL的实现细节: AVL树实现的关键点 AVL树与二叉搜索树结构类似,但又有些细微的区别,从上面AVL树的介绍我们知道它需要维护其左右节点平衡,实现AVL树关键在于标注节点高度.计算平衡因子.维护左右子树平衡这三点,下面分别介绍: 标注节点高度 从上面AVL树的定义中我们知道AVL树其左右节点高度差不能超过一,所以我们需要标注出每个节点高度: 1.节点高度为最大的子节点高度加1,其中叶子节点高度为1: 2.1与4叶子节点高度为1,节点3高度…
前言 本文不会去介绍tcp的具体协议,因为这个tcp 应该不能说是单纯的连接和传输数据这么简单,里面还有很多机制. 正文 首先介绍一下什么是协议族(protocal Family),举个例子PF_INET 为ipv4 协议族了. 为什么有一个族的概念呢?因为吧,ipv4 有很多协议,地址解析协议ARP(Address Resolution Protocol).逆地址解析协议RARP(Reverse Address Resolution Protocol).互联网控制报文协议ICMP(Intern…
前言 简单编写一下tcp例子. 正文 我们常说IOS有7层,实际上也只有4层,或者这样说简单的说是4层. 首先是数据链路层,首先这一层解决了什么问题呢?为什么要有这一层呢? 首先要抛开有操作系统的意识,因为它为我们做了太多东西了,摆在你面前的只有两个终端和一根网线. 数据链路层定义了在单个链路上如何传输数据.这些协议与被讨论的各种介质有关.示例:ATM,FDDI等.数据链路层必须具备一系列相应的功能,主要有:如何将数据组合成数据块,在数据链路层中称这种数据块为帧,帧是数据链路层的传送单位:如何控…
前言 前文我们介绍了网络协议的各层,同时也介绍了一下我们在编写代码时候的服务端的accept.bind.listen.connect.send做了什么. 可以说是从宏观的角度,或者代码开发的角度来说的,在此我觉得还不够具体. 同样我想解释一下为什么我说服务端listen之后,客户端已经可以进行tcp连接了,同样可以发送消息了. 正文 首先我们的tcp连接网图: 前提,这个时候服务端只是listen了,并没有accept.且客户端调用了connect,同时send 了hello word了. 第一…
前言 tcp的关闭不是简单粗暴的,相对而言是友好优雅的,好聚好散吧. 那么友好的关闭方式是这样的: 假设这里是客户端请求关闭的,服务端倒过来. 客户端:我要请求关闭 服务端:我接收到你的请求了,等我把要发的数据发完. 服务端:我要发的数据发完了,可以关闭了. 客户端:好的,我已经执行清理工作了,关闭结束. 那么这个时候为什么服务端直接告诉客户端可以直接关闭了呢? 为什么服务器端要做一些事情呢,到底有啥用. 回到设计的角度上,理论上是越简单越好的,遇到了什么问题,才使得我们要增加一个步骤呢. 那么…
学习了AngularJS挺长时间,最近再次回首看看指令这部分的时候,觉得比自己刚开始学习的时候理解的更加深入了,尤其是指令的作用域这部分. 步入正题: 每当一个指令被创建的时候,都会有这样一个选择,是继承自己的父作用域(一般是外部的Controller提供的作用域或者根作用域($rootScope)),还是创建一个新的自己的作用域,当然AngularJS为我们指令的scope参数提供了三种选择,分别是:false,true,{}:默认情况下是false. scope = false 首先我们来看…
基于Netty的私有协议栈的开发 书是人类进步的阶梯,每读一本书都使自己得以提升,以前看书都是看了就看了,当时感觉受益匪浅,时间一长就又还回到书本了!所以说,好记性不如烂笔头,以后每次看完一本书都写一些读后感,对于技术书则把对让自己醍醐灌顶的篇章记录下来,以便以后翻阅查看,也是记录自己学习的过程- _ -. OK!言归正传,最近由于公司需要做一个网关项目,需要用到基于TCP/IP私有协议接收数据,看完了<Netty权威指南>这本书,感觉作者写的很好,有些地方让我获益良多,虽然书上有些例子跑不通…
websocket 介绍 介绍引自 https://segmentfault.com/a/1190000012709475 群聊 from flask import Flask, request, render_template from geventwebsocket.handler import WebSocketHandler from gevent.pywsgi import WSGIServer from geventwebsocket.websocket import WebSock…
通信协议从广义上区分,可以分为公有协议和私有协议.由于私有协议的灵活性,它往往会在某个公司或者组织内部使用,按需定制,也因为如此,升级起来会非常方便,灵活性好.绝大多数的私有协议传输层都基于TCP/IP,所以利用Netty的NIO TCP协议栈可以非常方便地进行私有协议的定制和开发. 私有协议介绍 私有协议本质上是厂商内部发展和采用的标准,除非授权,其他厂商一般无权使用该协议.私有协议也称非标准协议,就是未经国际或国家标准化组织采纳或批准,由某个企业自己制订,协议实现细节不愿公开,只在企业自己生…
Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ 聊天.收发 email 等等.要解决网络上两台主机之间的进程通信问题,首先要唯一标识该进程,在 TCP/IP 网络协议中,就是通过 (IP地址,协议,端口号) 三元组来标识进程的,解决了进程标识问题,就有了通信的基础了. 本文主要介绍使用 Python 进行 TCP Socket 网络编程,假设你已…
第三部分:使用多线程 1.  单元模式和Windows Forms 单元模式线程是一个自动线程安全机制, 非常贴近于COM——Microsoft的遗留下的组件对象模型.尽管.NET最大地放弃摆脱了遗留下的模型,但很多时候它也会突然出现,这是因为有必要与旧的API 进行通信.单元模式线程与Windows Forms最相关,因为大多Windows Forms使用或包装了长期存在的Win32 API——连同它的单元传统. 单元是多线程的逻辑上的“容器”,单元产生两种容量——“单的”和“多的”.单线 程…
在新的Python 3.x中,BaseHTTPServer, SimpleHTTPServer, CGIHTTPServer整合到http.server包,SocketServer改名为socketserver. 任何一台装有操作系统(推荐Linux)和Python的计算机都可以作为HTTP服务器使用,来架设你的网站.在这里引入更高级的Python包,以写出更成熟的Python服务器. 1. 支持POST的socket服务器 我们首先改写原文中的HTTP服务器,从而让该服务器支持更加丰富的HTT…
1.  单元模式和Windows Forms 单元模式线程是一个自动线程安全机制, 非常贴近于COM——Microsoft的遗留下的组件对象模型.尽管.NET最大地放弃摆脱了遗留下的模型,但很多时候它也会突然出现,这是因为有必要与旧的API 进行通信.单元模式线程与Windows Forms最相关,因为大多Windows Forms使用或包装了长期存在的Win32 API——连同它的单元传统. 单元是多线程的逻辑上的“容器”,单元产生两种容量——“单的”和“多的”.单线 程单元只包含一个线程:多…
原文:Python网络02 Python服务器进化 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! **注意,在Python 3.x中,BaseHTTPServer, SimpleHTTPServer, CGIHTTPServer整合到http.server包,SocketServer改名为socketserver,请注意查阅官方文档. 在上一篇文章中(用socket写一个Python服务器),我们在不依赖框架和CGI的情况下…
54.1 编程模型介绍 54.1.1 TCP 客户端服务器编程模型 客户端调用序列 调用 socket 函数创建套接字 调用 connect 连接服务器端 调用 I/O 函数(read/write) 与服务器端通讯 调用 close 关闭套接字 服务器端调用序列 调用 socket 函数创建套接字 调用 bind 绑定本地地址和端口 调用 listen 启动监听 调用 accept 从已连接队列中提取客户连接 调用 I/O 函数(read/write)与客户端通讯 调用 close 关闭套接字…
Python Socket网络编程 Socket是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于Socket来完成通信的,例如我们每天浏览网页.QQ聊天.收发emali等等.要解决网络上两台主机之间的进程通信问题,首先要唯一标识该进程,在TCP/IP网络协议中,就是通过(IP地址,协议,端口号)三元组来识别进程的,解决了进程标识问题,就有了通信的基础了. 本文主要介绍使用Python进行TCP Socket网络编程,…
Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ 聊天.收发 email 等等.要解决网络上两台主机之间的进程通信问题,首先要唯一标识该进程,在 TCP/IP 网络协议中,就是通过 (IP地址,协议,端口号) 三元组来标识进程的,解决了进程标识问题,就有了通信的基础了. 本文主要介绍使用 Python 进行 TCP Socket 网络编程,假设你已…
C#中的线程(三)多线程   Keywords:C# 线程Source:http://www.albahari.com/threading/Author: Joe AlbahariTranslator: Swanky WuPublished: http://www.cnblogs.com/txw1958/Download:http://www.albahari.info/threading/threading.pdf 第三部分:使用多线程 单元模式和Windows Forms 单元模式线程是一个…
WebSocket 出现前 构建网络应用的过程中,我们经常需要与服务器进行持续的通讯以保持双方信息的同步.通常这种持久通讯在不刷新页面的情况下进行,消耗一定的内存资源常驻后台,并且对于用户不可见.在 WebSocket 出现之前,我们有一下解决方案: 传统轮询(Traditional Polling) 当前Web应用中较常见的一种持续通信方式,通常采取 setInterval 或者 setTimeout 实现.例如如果我们想要定时获取并刷新页面上的数据,可以结合Ajax写出如下实现: setIn…
1.  单元模式和Windows Forms 单元模式线程是一个自动线程安全机制, 非常贴近于COM——Microsoft的遗留下的组件对象模型.尽管.NET最大地放弃摆脱了遗留下的模型,但很多时候它也会突然出现,这是因为有必要 与旧的API 进行通信.单元模式线程与Windows Forms最相关,因为大多Windows Forms使用或包装了长期存在的Win32 API——连同它的单元传统. 单元是多线程的逻辑上的“容器”,单元产生两种容量——“单的”和“多的”.单线 程单元只包含一个线程:…
1.     闭包 定义:闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)(想想Erlang的外层函数传入一个参数a, 内层函数依旧传入一个参数b, 内层函数使用a和b, 最后返回内层函数) 代码:def ExFunc(n): sum=n def InsFunc(): return sum+1 return InsFunc 2.     装饰器 def debug(func): def wrapper(): print "[DEBUG]: enter {}()"…
TCP客户端服务器编程模型: 服务器: 调用socket函数创建套接字 调用bind绑定本地IP和端口 调用listen启动监听(准备好接收客户端链接的队列) 调用accept从已连接队列中提取第一个连接.(如果没有,会阻塞.) 调用I/O函数(read/write)与客户端通讯 调用close关闭套接字.(多个套接字) 客户端: 调用socket创建套接字 调用connect连接服务器 调用I/O函数(read/write)与服务器通讯 调用close关闭套接字 Linux下和Mac下代码一样…