socket

Redis配置文件介绍

泪湿孤枕 提交于 2020-03-09 16:11:23
Redis配置文件 配置参数 参数介绍 bind 0.0.0.0 #监听地址,可以用空格隔开后多个监听 IP protected-mode yes #redis3.2 之后加入的新特性,在没有设置 bind IP 和密码的时候只允许访问 127.0.0.1:6379,没什么实际意义 port 6379 #监听端口 tcp-backlog 511 #三次握手的时候 server 端收到 client ack 确认号之后的队列值。默认值即可 timeout 0 #客户端和 Redis 服务端的连接超时时间,默认是 0,表示永不超时。 tcp-keepalive 300 #tcp 会话保持时间 daemonize no #默认情况下 redis 不是作为守护进程运行的,如果你想让它在后台运行,你就把它改成 yes,当 redis 作为守护进程运行的时候,它会写一个 pid 到 /var/run/redis.pid 文件里面 supervised no #和操作系统相关参数,可以设置通过 upstart 和 systemd 管理 Redis 守护进程,centos 7 以后都使用 systemd pidfile /var/run/redis_6379.pid #pid 文件路径,文件路径最好和redis安装路径相同 loglevel notice #日志级别,配置文件中有注释其他日志级别

SO_LINGER选项

筅森魡賤 提交于 2020-03-09 13:33:12
SO_LINGER选项用于控制close系统调用在关闭TCP连接时的行为。默认情况下,当我们使用close系统调用来关闭一个socket时,close将立即返回,TCP模块负责把该socket对应的TCP发送缓冲区中残留的数据发送给对方。 设置(获取)SO_LINGER选项的值时,我们需要给setsockopt(getsockopt)系统调用传递一个linger类型的结构体,其定义如下: # include <sys/socket.h> struct linger { int l_onoff ; // 开启(非0)还是关闭(0)该选项 int l_linger ; // 滞留时间 } ; 根据linger结构体中两个成员变量的不同值,close系统调用可能产生如下3种行为之一: l_onoff等于0(关闭) :此时SO_LINGER选项不起作用,close用默认行为来关闭socket。 l_onoff不为0(开启) :l_linger等于0。此时close系统调用立即返回,TCP模块将丢弃被关闭的socket对应的TCP发送缓冲区中残留的数据,同时给对方发送一个复位报文段(RST)。因此,这种情况给服务器提供了异常终止一个连接的方法。 l_onoff不为0(开启) :l_linger大于0。此时close的行为取决于两个条件

记一次使用Socket模拟HTTP请求

◇◆丶佛笑我妖孽 提交于 2020-03-09 13:09:52
直接进入主题。 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议,HTTP是基于TCP/IP通信协议来传递数据。 Java中的正好有一个类可以实现TCP的传输与接收,那就是Socket。 首先要先起一个SpringBoot项目用于接收HTTP请求,Controller很简单,接收请求,并返回请求的内容 @RequestMapping("response") @Controller public class MainController { private static Logger LOG = LoggerFactory.getLogger(MainController .class); @RequestMapping("index.html") @ResponseBody public String index(HttpServletRequest request){ LOG.info("请求内容:"+requestContent(request)); return "请求内容:"+requestContent(request); } public String requestContent(HttpServletRequest

网络协议UDP

南笙酒味 提交于 2020-03-09 11:41:29
tcp/ip协议介绍:计算机网络协议,不同类型不同厂家之间的终端进行沟通,规范协议 。 互联网协议族:为tcp/ip协议族 大概有上百种协议,其中tcp协议、ip协议使用的比较 多所以大家默认成为tcp/ip IP地址:网络地址(ip地址与子网掩码进行与运算获得)和主机地址 A类IP地址:由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0” (地址范围1.0.0.1-126.255.255.254) B类IP地址:由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是 “10”(128.1.0.1-191.255.255.254) C类IP地址:由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须 是“110”(范围192.0.1.1-223.255.255.254) ------------------------------socket介绍------------------------------ #定义:socket(简称 套接字) 是进程间通信的一种方式,它与其他进程间通信的一个主 要不同是: #import socket:应用socket包 #socket.socket(Address Family,Type):创建一个套接字,返回socket的描述符 Address Family:可以选择 AF_INET(用于 Internet

socket--基础(笔记)

生来就可爱ヽ(ⅴ<●) 提交于 2020-03-08 23:15:03
1、网络 计算机领域中,网络是信息传输、接收、共享的虚拟平台。 通过它把各个点、面、体的信息联系到一起,从而实现这些资源的共享。 网络编程从大的方面说就是对信息的发送到接收。 通过操作相应Api调度计算机硬件资源,并利用传输管道(网线)进行数据交互的过程。 2、七层网络模型 与 四层网络模型 七层:应用层-》表示层-》会话层-》传输层-》网络层-》数据链路层-》物理层(电信号/光信号) TCP/IP 四层: 应用层-》网络层-》数据链路层-》物理层(电信号/光信号) socket 简单来说就是IP地址与端口的结合协议 一种地址与端口的结合描述协议 TCP/IP 协议的相关API的总称;是网络Aip的集合实现 涵盖了:Stream Socket/Datagram Socket 四个要素:客户端地址、客户端端口、服务器地址、服务器端口 TCP/IP 协议中,两个进程通信的主要模式为:CS模式 (Client-Server),常见的:FTP、SMTP、HTTP TCP tcp是面向连接的通信协议 通过三次握手建立连接,通讯完成时要拆除连接 由于TCP是面向连接的所以只能用于端到端的通讯 UDP UDP是面向无连接的通信协议 UDP数据包括目端口号和信息源端口号信息 由于不需要连接,所以可以实现广播发送,并不局限与端到端 案例 (TCP) public class Server {

关于Socket服务器与客户端双向通信时碰到的一个坑

北慕城南 提交于 2020-03-08 22:44:39
学习Socket时, 想实现一个读写分离,能够实时接收和发送消息的socket,却一直发送消息出去却不能打印出来。 客户端发送消息出去后。 客户端却不能打印出消息,客户端也不能打印出消息。 一直冥思苦想,一直到不到问题所在。 直到 发现 PrintWriter将 write 方法 改为 println后成功打印出消息。 最后 附上源码 客户端: 1 package my.socket; 2 3 import java.io.*; 4 import java.net.Socket; 5 6 public class SocketClient { 7 8 public static void main(String[] args) throws IOException { 9 Socket socket = new Socket("localhost",55532); 10 11 ReadSocketThread readSocketThread = new ReadSocketThread(socket); 12 readSocketThread.start(); 13 14 WriteSocketThread writeSocketThread = new WriteSocketThread(socket); 15 writeSocketThread.start(); 16 17

python后端学习第一天:了解基础

邮差的信 提交于 2020-03-08 22:38:36
""" 这里是服务器 """ import socket # 这个程序就是一个套路程序, 套路程序没必要思考为什么会是这样 # 记住套路, 能用, 就够了 # 运行这个程序后, 浏览器打开 localhost:2000 就能访问了 # # 服务器的 host 为空字符串, 表示接受任意 ip 地址的连接 # post 是端口, 这里设置为 2000, 随便选的一个数字 host = '' port = 2000 # s 是一个 socket 实例 s = socket . socket ( ) # s.bind 用于绑定 # 注意 bind 函数的参数是一个 tuple s . bind ( ( host , port ) ) # 用一个无限循环来处理请求 while True : # 套路, 先要 s.listen 开始监听 # 注意 参数 5 的含义不必关心 s . listen ( 5 ) # 当有客户端过来连接的时候, s.accept 函数就会返回 2 个值 # 分别是 连接 和 客户端 ip 地址 connection , address = s . accept ( ) # recv 可以接收客户端发送过来的数据 # 参数是要接收的字节数 # 返回值是一个 bytes 类型 request = connection . recv ( 1024 ) # bytes

Node.js基础知识梳理

你说的曾经没有我的故事 提交于 2020-03-08 22:03:49
Node.js基础知识梳理 一、nodeJs概述 1、nodejs解决了高并发的问题,支持大量用户的并发连接;它不是为新连接的用户新开一个线程,而是为新连接用户触发一个事件 2、js引擎内置了JIT(即时编译),提高了js的执行速度,几乎接近于本地运行速度 3、nodejs采用非阻塞型I/O及时间循环机制;即它的I/O操作是不会阻塞线程的,并且通过事件的回电函数形成触发时间环 4、nodejs适合用于,大量处理输入/输出的应用,即如聊天器、电商网站等 5、nodejs中是通过以模块为单位来划分所有功能的,模块的导出和引入 //foo.js exports.printFoo = function(){ return "foo" } //bar.js var foo = require('./foo.js'); console.log(foo.printFoo); 核心模块有: assert、buffer、child_process、cluster、console、crypto、debugger、dns、domian、events、fs、http、https、net、os、path、punycode、querystring、readline、repl、stream、string_decoder、tls、tty、url、util、vm、zlib 二、基础知识 1、控制台 1.1

Golang解决TCP粘包拆包问题

大兔子大兔子 提交于 2020-03-08 22:03:38
什么是粘包问题 最近在使用Golang编写Socket层,发现有时候接收端会一次读到多个数据包的问题。于是通过查阅资料,发现这个就是传说中的TCP粘包问题。下面通过编写代码来重现这个问题: 服务端代码 server/main.go func main ( ) { l , err := net . Listen ( "tcp" , ":4044" ) if err != nil { panic ( err ) } fmt . Println ( "listen to 4044" ) for { // 监听到新的连接,创建新的 goroutine 交给 handleConn函数 处理 conn , err := l . Accept ( ) if err != nil { fmt . Println ( "conn err:" , err ) } else { go handleConn ( conn ) } } } func handleConn ( conn net . Conn ) { defer conn . Close ( ) defer fmt . Println ( "关闭" ) fmt . Println ( "新连接:" , conn . RemoteAddr ( ) ) result := bytes . NewBuffer ( nil ) var buf [

高性能Server---Reactor模型

浪子不回头ぞ 提交于 2020-03-08 18:16:43
无处不在的C/S架构 在这个充斥着云的时代,我们使用的软件可以说99%都是C/S架构的! 你发邮件用的Outlook,Foxmail等 你看视频用的优酷,土豆等 你写文档用的Office365,googleDoc,Evernote等 你浏览网页用的IE,Chrome等(B/S是特殊的C/S) …… C/S架构的软件带来的一个明显的好处就是:只要有网络,你可以在任何地方干同一件事。 例如:你在家里使用Office365编写了文档。到了公司,只要打开编辑地址就可以看到在家里编写的文档,进行展示或者继续编辑。甚至在手机上进行阅读与编辑。不再需要U盘拷来拷去了。 C/S架构可以抽象为如下模型: C就是Client(客户端),上面的B是Browser(浏览器) S就是Server(服务器): 服务器管理某种资源,并且通过操作这种资源来为它的客户端提供某种服务 C/S架构之所以能够流行的一个主要原因就是网速的提高以及费用的降低,特别是无线网络速度的提高。试想在2G时代,大家最多就是看看文字网页,小说什么的。看图片,那简直就是奢侈!更别说看视频了! 网速的提高,使得越来越多的人使用网络,例如:优酷,微信都是上亿用户量,更别说天猫双11的瞬间访问量了!这就对服务器有很高的要求!能够快速处理海量的用户请求!那服务器如何能快速的处理用户的请求呢? 高性能服务器 高性能服务器至少要满足如下几个需求: