• 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.命令行中重启服务器验证新密码

  • 相关阅读:
    008-解决sublime text3安装Package Control问题
    156-a++与++a区别?
    155-类型转换的六条规则是什么?
    040-springboot工程无法逆向工程生成?
    153-如何搭建springboot框架?
    【根据生日获取年龄】
    富文本 保存转义StringEscapeUtils.unescapeHtml4(
    git ,报403错误,完美解决方案
    idea创建Maven项目后启动报404
    IntelliJ IDEA2016.1 + maven 创建java web 项目[转]
  • 原文地址:https://www.cnblogs.com/Fzhiyuan/p/11006757.html
Copyright © 2020-2023  润新知