day38
作者:互联网
今日内容:
epoll要解决的问题
1.避免频繁的对等待队列进行操作
2,避免遍历所有socket
对于第一个问题先看select的处理方式
while Ture:
r_list,w_list,x_list = select.select(rlist,wlist,xlist)
每次处理完一次读写后,都需要将所用过冲重复一遍,包括移除进程,添加进程,默认就会将进程添加到等待队列,并阻塞住进程,然而等待队列的更新操作并不频繁,
所以对于第一个问题epoll,采取的方案是,将对等待队列的维护和,阻塞进程这两个操作进行拆分
import socket,selectserver = socket.socket()server.bind(("127.0.0.1",1688))server.listen(5)
创建epoll事件对象,后续要监控的事件添加到其中
epoll = select.epoll()
**注册服务器监听fd到等待读事件
epoll.register(server.fileno(), select.EPOLLIN) # 需要关注 server这个socket的可读事件
等待事件发生
while True: for sock,event in epoll.poll():
pass
在epoll中register 与 unregister函数用于维护等待队列
register 是进程添加到等待队列中 unregister 把进程从等待队列中删除
epoll常用方法
import select 导入select模块
epoll = select.epoll() 创建一个epoll对象
epoll.register(文件句柄,事件类型) 注册要监控的文件句柄和事件
事件类型:
select.EPOLLIN 可读事件
select.EPOLLOUT 可写事件
select.EPOLLERR 错误事件
select.EPOLLHUP 客户端断开事件
epoll.unregister(文件句柄) 销毁文件句柄
epoll.poll(timeout) 当文件句柄发生变化,则会以列表的形式主动报告给用户进程,timeout
为超时时间,默认为-1,即一直等待直到文件句柄发生变化,如果指定为1
那么epoll每1秒汇报一次当前文件句柄的变化情况,如果无变化则返回空
epoll.fileno() 返回epoll的控制文件描述符(Return the epoll control file descriptor)
epoll.modfiy(fineno,event) fineno为文件描述符 event为事件类型 作用是修改文件描述符所对应的事件
epoll.fromfd(fileno) 从1个指定的文件描述符创建1个epoll对象
epoll.close() 关闭epoll对象的控制文件描述符
案例:
import socketclientsocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
服务端IP地址和端口号元组
server_address = ('127.0.0.1',1688)
客户端连接指定的IP地址和端口号
clientsocket.connect(server_address)
while True: #输入数据 data = raw_input('please input:') if data == "q": break if not data: continue #客户端发送数据 clientsocket.send(data.encode("utf-8")) #客户端接收数据 server_data = clientsocket.recv(1024) print ('客户端收到的数据:',server_data)
关闭客户端socket
clientsocket.close()
数据库:
相关概念:
本质就是一套cs结构的tcp程序
客户端连接服务器 向服务器发送指令,来完成数据的操作
数据库下载安装:
1,下载安装包
2,解压到某个目录下
3,添加环境变量
将bin所在的完整路径copy添加到系统的path中
4.作为服务器 ,应该自启动mysql服务器 需要自系统服务
mysql --install 运行输入services 查看是否成功
删除服务sc delete mysql 如果需要重新安装的话
数据库与文件系统的对应关系**
一个数据项 name = jerry 本质是文件中某一行的一部分数据
一条记录 jerry,18, man 本质就是文件里的一行数据
一张表 本质就是一个文件
数据库 文件夹
DBMS DataBaseManagerSystem 数据库管理系统 数据库的服务器端程序
数据库服务器 运行有DBMS的计算机
连接服务器的指令
本质上是TCP程序,必须指定ip和端口,如果服务器就运行在本机上 可以省略ip,如果端口没改过,就是默认端口,也可以省略端口
完整的写法:
mysql -h跟ip地址 -p端口 -u用户名 -p密码
实例:mysql -uroot -p
mysql 5.6 默认是没有密码的
注册系统服务
服务器的启动和关闭都需要执行命令,不够方便怎么办?
将mysql注册到系统服务中 mysqld --install 需要注意的是 默认注册的服务名称叫做mysql 这与bin下的mysql是两码子事,一个系统服务一个是客户端执行文件
删除服务 sc delete mysql(服务名)
查看系统服务 运行->services.msc 通常设置为自动启动。
如果注册系统服务失败则可能是因为你之前安装过mysql 卸载重装即可。
界面版的安装失败也可能是之前安装了,导致端口占用。
修改管理员密码
1,如果知道原始密码 可以使用mysqladmin这个工具
mysqladmin -p旧密码 -u用户名 password 新密码
实例:mysqladmin -uroot -p password 123
2,不知道原始密码的情况
删除密码文件,会删除所有授权信息
跳过授权表(即密码认证) 可以在启动服务器时,指定让其忽略授权信息
net stop mysql 停止服务
net start mysql 启动服务
mysql --skip-grant-tables 如果在服务器中使用了net stop mysql 停止服务命令,先在此启动服务器就用此命令
跳过这个操作是服务器相关的操作所以 咱的先关掉服务器重新开 在重新开的时候来告诉它1.停止服务2.启动服务器并添加参数mysqld --skip-grant-tables3.使用客户端登录服务器 执行修改命令 此时不需要输入密码update mysql.user set password = password("123123") where user="root" and host="localhost"**4.刷新权限flush privileges5.命令行中重启服务器验证新密码
标签:socket,day38,epoll,mysql,服务器,select,客户端 来源: https://www.cnblogs.com/Fzhiyuan/p/11006757.html